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

示例:

输入: "25525511135" 输出: ["255.255.11.135", "255.255.111.35"]

题目很简单但是,需要特定判断的情况很多。

思路可以是递归和多重循环,。

因为该题没有太需要用到递归,所以直接用循环。

易错的地方会在代码中标注。

  class Solution
{
public:
vector<string> restoreIpAddresses(string s)
{
vector<string> res;
int len = s.size();
///第一次
for (int i = 1; i <= 3; i++)
{
//判断是否超过了字符串的长度,除了最后一次,都要需要判断
if (i >= len)
continue;
string str1 = string(s.begin(), s.begin() + i);
//检查字符串是否符合要求
if (!Check(str1))
continue;
///第二次
for (int j = 1; j <= 3; j++)
{
if (i + j >= len)
continue;
string str2 = string(s.begin() + i, s.begin() + i + j);
if (!Check(str2))
continue;
///第三次和第四次
for (int k = 1; k <= 3; k++)
{
if (i + j + k >= len)
continue;
string str3 = string(s.begin() + i + j, s.begin() + i + j + k);
if (!Check(str3))
continue;
string str4 = string(s.begin() + i + j + k, s.end());
if (!Check(str4))
continue;
res.push_back(str1 + '.' + str2 + '.' + str3 + '.' + str4);
}
}
}
return res;
} bool Check(string s)
{
//检测最后一个字符串str4是否为空
if (s.size() == 0)
return false;
//判断是否有011,01这种以0开头的字符串
if (s[0] == '0' && s.size() > 1)
return false;
int number = 0;
for (int i = 0; i < s.size(); i++)
{
number = number * 10 + (s[i] - '0');
//需要在里面进行判断是否超出范围
//因为number是字符串转来的,很可能超出了int的范围,超出后变成负数判断就比255小,返回true,显然这是不正确的
//所以在循环里面提前判断
if (number > 255)
return false;
}
return true;
}
};

最新文章

  1. 导入 cocoapods引入的第三方库头文件,提示找不到
  2. easyUi datagrid 返回时间格式化操作
  3. eclipse workspace 共享配置文件
  4. [拇指飞动]构建高性能Web站点(1)
  5. HTML5 API&#39;s (Application Programming Interfaces)
  6. React使用笔记2-React Components的生命周期
  7. 分蛋糕(C - 二分查找)
  8. vs2010环境下将Win32控制台应用程序,改为Win32项目
  9. Ant Design Pro 学习三 新建组件
  10. c++ 指针总结 函数参数指针调用和堆栈内存的分配原理
  11. 利用CDLinux里面的水滴破解路由器密码的教程
  12. java代码审计中的一些常见漏洞及其特征函数
  13. Python爬虫与一汽项目【三】爬取中国五矿集团采购平台
  14. Python classmethod 修饰符
  15. Weex Ui - Weex Conf 2018 干货分享
  16. kbmmw中向服务器端传递对象的一种简单方式
  17. mac下VirtualBox跟linux虚拟机共享文件夹
  18. Linux基础命令---bzmore
  19. python2.7中可以使用到的一些模块地址
  20. python函数式编程,性能,测试,编码规范

热门文章

  1. NX二次开发-UFUN输出UF函数使用错误UF_get_fail_message
  2. csp-s模拟测试92
  3. Devexpress ProgressBarControl的使用
  4. java锁分析
  5. HIVE文件
  6. 使用CSS为图片添加更多趣味的5种方法
  7. JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。
  8. JQuery ajax提交表单及表单验证
  9. BigDecimal踩过的大坑
  10. leetcode-8-字符串转换整数(atoi)