问题描述:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135"
,
return ["255.255.11.135", "255.255.111.35"].
(Order does not matter)
问题求解:
IP分为4段,每一段的值域为0-255,也就是说每一位可能是1位,2位或者3位数字。
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
int n=s.size();
vector<string> res;
if(n > 12) return res;
string ip1,ip2,ip3,ip4;
string ip;
for(int i=0;i<n;i++)
{//[0,i]
for(int j=i+1;j<n;j++)
{//[i+1,j]
for(int k=j+1;k<n-1;k++)
{//[j+1,k], [k+1,n-1]
ip1=s.substr(0,i+1);
ip2=s.substr(i+1,j-i);
ip3=s.substr(j+1,k-j);
ip4=s.substr(k+1);
if(isvalid(ip1)&&isvalid(ip2)&&isvalid(ip3)&&isvalid(ip4))
{
string ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
res.push_back(ip);
}
}
}
}
return res;
}
bool isvalid(string str)
{
if(str.size()==0) return false;
if(str[0]=='0')
{
return (str.size()==1);
}
int subip=stoi(str);
return subip<=255?true:false;
}
};