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