数据结构与算法 -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的相关知识,小伙伴们学会了吗,快去实现一下吧~

相关文章
|
3月前
|
机器学习/深度学习 存储 算法
【算法训练-回溯算法 三】【回溯算法最佳实践】括号生成、复原IP地址
【算法训练-回溯算法 三】【回溯算法最佳实践】括号生成、复原IP地址
46 0
|
9月前
|
算法
代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
45 0
|
10月前
|
算法
代码随想录Day23 回溯算法 LeetCode T93 复原ip地址 LeetCode T78子集 LeetCode T90 子集II
代码随想录Day23 回溯算法 LeetCode T93 复原ip地址 LeetCode T78子集 LeetCode T90 子集II
30 0
|
12月前
|
算法
算法训练Day28|● 93.复原IP地址 ● 78.子集 ● 90.子集II
算法训练Day28|● 93.复原IP地址 ● 78.子集 ● 90.子集II
|
算法 Java
【算法】字符串复原IP地址,从前序与中序编辑序列构造二叉树 三道算法题
字符串复原IP地址,从前序与中序编辑序列构造二叉树
103 1
【算法】字符串复原IP地址,从前序与中序编辑序列构造二叉树 三道算法题
|
存储 算法
☆打卡算法☆LeetCode 93、复原 IP 地址 算法解析
“给定一个只包含整数的字符串,表示一个IP地址,返回所有可能有效的IP地址,在这些地址中插入点来形成。”
|
6天前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
5天前
|
机器学习/深度学习 算法 定位技术
MATLAB - 遗传算法(GA)求解旅行商问题(TSP)
MATLAB - 遗传算法(GA)求解旅行商问题(TSP)
12 3
|
7天前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。
|
1月前
|
传感器 算法
基于无线传感器网络的MCKP-MMF算法matlab仿真
MCKP-MMF算法是一种启发式流量估计方法,用于寻找无线传感器网络的局部最优解。它从最小配置开始,逐步优化部分解,调整访问点的状态。算法处理访问点的动态影响半径,根据带宽需求调整,以避免拥塞。在MATLAB 2022a中进行了仿真,显示了访问点半径请求变化和代价函数随时间的演变。算法分两阶段:慢启动阶段识别瓶颈并重设半径,随后进入周期性调整阶段,追求最大最小公平性。
基于无线传感器网络的MCKP-MMF算法matlab仿真

热门文章

最新文章