数据结构与算法 -3 :复原IP地址

简介: 首先IP从基本大类分共有五种(分别是A、B、C、D、E类网址),观察这五种网址发现有一个共同点:任何一种IP可以分为四段,每段的十进制数值均小于255,所有数字的位数总和(即字符串的长度)不超过12。

【Leetcode】题目描述


给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。


示例 :


输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]


基础知识补充(这里讨论的情况是IPV4地址)


首先IP从基本大类分共有五种(分别是A、B、C、D、E类网址),观察这五种网址发现有一个共同点:任何一种IP可以分为四段,每段的十进制数值均小于255,所有数字的位数总和(即字符串的长度)不超过12。


看下IPV4各类地址的范围:


  • A类地址网络号范围:1.0.0.0-126.0.0.0
  • B类地址网络号范围:128.0.0.0-191.255.0.0
  • C地址网络号范围:192.0.0.0-223.255.255.0
  • D类地址范围:224.0.0.0-239.255.255.255
  • E类地址范围:240.0.0.0-255.255.255.254


更多IP相关知识请参考如下网址:https://www.cnblogs.com/lsgxeva/p/9208298.html


思路提供


了解了基础知识补充的内容之后,是不是觉得很简单了呢,直接一种暴力的思路,使用4个for循环,每段循环遍历3次,当且仅当for循环四个变量值之和等于所给字符串长度时,对字符串进行拆分,并判断每段数字是否符合要求(对于每段的整数,只需考虑其大小是否在0-255之间即可),若符合要求,那么对已拆分好的字符串进行复原操作(即每段数字之后加上”.”即可)。


代码展示


  • 复原IP地址[1]


class Solution {
public:
  vector<string> restoreIpAddresses(string s) {
      vector<string> res;
      for (int a = 1; a < 4; ++a)
      for (int b = 1; b < 4; ++b)
      for (int c = 1; c < 4; ++c)
      for (int d = 1; d < 4; ++d)
          if (a + b + c + d == s.size()) {
              int A = stoi(s.substr(0, a));
              int B = stoi(s.substr(a, b));
              int C = stoi(s.substr(a + b, c));
              int D = stoi(s.substr(a + b + c, d));
              if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
                  string t = to_string(A) + "." + to_string(B) + "." + to_string(C) + "." + to_string(D);
                  if (t.size() == s.size() + 3) res.push_back(t);
              }
          }
      return res;
  }
};


本文总结


在本文中,我们讲解了如何将所给输入的一串数字转换成一个可用的IPV4地址,并且我们也了解部分关于IPV4的相关知识,小伙伴们学会了吗,快去实现一下吧~

相关文章
|
7月前
|
机器学习/深度学习 存储 算法
【算法训练-回溯算法 三】【回溯算法最佳实践】括号生成、复原IP地址
【算法训练-回溯算法 三】【回溯算法最佳实践】括号生成、复原IP地址
58 0
|
算法
代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
61 0
|
算法
代码随想录Day23 回溯算法 LeetCode T93 复原ip地址 LeetCode T78子集 LeetCode T90 子集II
代码随想录Day23 回溯算法 LeetCode T93 复原ip地址 LeetCode T78子集 LeetCode T90 子集II
39 0
算法训练Day28|● 93.复原IP地址 ● 78.子集 ● 90.子集II
算法训练Day28|● 93.复原IP地址 ● 78.子集 ● 90.子集II
|
算法 Java
【算法】字符串复原IP地址,从前序与中序编辑序列构造二叉树 三道算法题
字符串复原IP地址,从前序与中序编辑序列构造二叉树
121 1
【算法】字符串复原IP地址,从前序与中序编辑序列构造二叉树 三道算法题
|
存储 算法
☆打卡算法☆LeetCode 93、复原 IP 地址 算法解析
“给定一个只包含整数的字符串,表示一个IP地址,返回所有可能有效的IP地址,在这些地址中插入点来形成。”
|
12天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
18天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
5天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
5天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。