题目链接:
题目描述:
给定一个字符串,恢复并返回所有符合条件的IP串。
For example:
Given “25525511135”,
return [“255.255.11.135”, “255.255.111.35”]. (Order does not matter)
题目分析:
IP分为4段,每段有1~3位,当是2或3位的时候,这段ip的开头第一个字符不能为0。
三重循环,每重循环对应选择一段IP上有多少位。
代码:
class Solution {
public:
bool isValid(string s){
if(s.length()==1 && s>="0" && s<="9"){
return true;
}
if(s.length()==2 && s>="10" && s<="99"){
return true;
}
if(s.length()==3 && s>="100" && s<="255"){
return true;
}
return false;
}
vector<string> restoreIpAddresses(string s) {
int len=s.size();
vector<string> result;
if(len<4 || len>12){
return result;
}
for(int i=0;i<3 ;i++){
for(int j=i+1;j<=i+3 && j<len ;j++){
for(int k=j+1;k<=j+3 && k<len-1; k++){
string ip1=s.substr(0,i+1);
string ip2=s.substr(i+1,j-i);
string ip3=s.substr(j+1,k-j);
string ip4=s.substr(k+1);
if(isValid(ip1) && isValid(ip2) &&isValid(ip3) &&isValid(ip4))
{
ip1=ip1+"."+ip2+"."+ip3+"."+ip4;
result.push_back(ip1);
}
}
}
}
return result;
}
};