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





全文字数:1460字html

全文阅读时间:4分钟web


【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.255app

  • 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的相关知识,小伙伴们学会了吗,快去实现一下吧~



参考资料

[1]

【Leetcode】复原IP地址: https://leetcode-cn.com/problems/restore-ip-addresses/flex




- End -



 往期推荐 

🔗



数据结构与算法系列


  1. 数据结构与算法-1 :旋转图像
  2. 数据结构与算法 -2 :罗马数字与整数的相互转换

毕业设计系列


  1. TensorFlow环境搭建

  2. 毕业设计(基于TensorFlow的深度学习与研究)之文献翻译篇

  3. 毕业设计(基于TensorFlow的深度学习与研究)之核心篇CNN-AlexNet详解

  4. 毕业设计(基于Tensorflow的深度研究与实现)之番外篇

  5. 毕业设计(基于TensorFlow的深度学习与研究)之完结篇

  6. 【东拼西凑】毕业设计之论文查重篇



本站文章搜索推荐





1



长按关注




本文分享自微信公众号 - hahaCoder(hahaCoder)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索