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)
class Solution {
public:
bool atoi(const string &s, int begin, int end){
int t=0;
for(int i=begin;i<=end;i++){
if(s[i]<'0'||s[i]>'9'){
return false;
}
t=t*10+s[i]-'0';
}
if(t<0||t>255){
return false;
}else{
return true;
}
}
void restoreIpAddresses(vector<string> &result,const string &s,
int index,string &tmp,int curr,int counter){
if(s.size()-index>(4-counter)*3||s.size()-index<4-counter){
return;
}
if(index==s.size()&&counter==4){
string t;
t.assign(tmp.begin(),tmp.end()-1);
result.push_back(t);
return;
}
int n=2;
if(s[index]=='0'){
n=1;
}else if(s[index]=='1'||s[index]=='2'){
n=3;
}
for(int i=0;i<n;i++){
if(atoi(s,index,index+i)){
tmp.insert(tmp.begin()+curr+i+1,'.');
restoreIpAddresses(result,s,index+i+1,tmp,curr+i+2,counter+1);
tmp.erase(tmp.begin()+curr+i+1);
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> result;
if(s.empty()||s.size()<4||s.size()>12){
return result;
}
string tmp(s);
restoreIpAddresses(result,s,0,tmp,0,0);
return result;
}
};