题目链接:https://leetcode-cn.com/problems/restore-ip-addresses/
Description
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。
Sample
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
Solution
枚举前面三个数字的长度,使用三重for循环去截取,判断一下是否符合题目要求,即可。
AC Code
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> ss;
int len=s.length();
if(len<4||len>12) return ss;
for(int i=1;i<=3;i++){
if(i==3&&s.substr(0,3)>"255") continue;
if(i>1&&s.substr(0,1)=="0") continue;//可能会出现"012"这种情况,显然题目要求不可以有前导零
for(int j=1;j<=3;j++){
if(len-i-j<=0) continue;
if(j==3&&s.substr(i,3)>"255") continue;
if(j>1&&s.substr(i,1)=="0") continue;
for(int k=1;k<=3;k++){
if(len-i-j-k<=0||len-i-j-k>3) continue;//枚举前面三个数字的长度,最后的数字长度可知
if(k==3&&s.substr(i+j,3)>"255") continue;
if(k>1&&s.substr(i+j,1)=="0") continue;
if(len - i - j - k==3&&s.substr(i+j+k)>"255") continue;
if(len-i-j-k>1&&s.substr(i+j+k,1)=="0") continue;
else{
string str;
str+=s.substr(0,i);
str+='.';
str+=s.substr(i,j);
str+='.';
str+=s.substr(i+j,k);
str+='.';
str+=s.substr(i+j+k);
ss.push_back(str);
}
}
}
}
return ss;
}
};