题目
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。
每个分割的数必须小于256,不能以0开头。
代码:
class Solution {
public:
bool legal(string &s,int begin,int end) //判断起始位置段的字符是否合法
{
if(end-begin==1)
return true;
if(s[begin]=='0') //'0'开头,不合法
return false;
int num=0; //判断数字大小
for(int i=begin;i<end;i++)
{
num*=10;
num+=s[i]-'0';
}
if(num<256)
return true;
return false;
}
vector<string> restoreIpAddresses(string s) {
vector<string> ans;
if(s.size()>12) //长度限制
return ans;
string temp;
int len=s.size();
for(int i=1;i<len-2;i++) //第一位
{
temp.clear();
if(legal(s,0,i))
{
temp.append(s,0,i);
temp+='.';
}
else
continue;
for(int j=i+1;j<len-1;j++) //第二位
{
if(legal(s,i,j))
{
temp.append(s,i,j-i);
temp+='.';
for(int k=j+1;k<len;k++) //第三第四位
{
if(legal(s,j,k)&&legal(s,k,len))
{
temp.append(s,j,k-j);
temp+='.';
temp.append(s,k,len-k);
ans.push_back(temp);
for(int l=j;l<=len;l++)
temp.pop_back();
}
}
for(int k=i;k<=j;k++)
temp.pop_back();
}
else
break;
}
}
return ans;
}
};