class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
if(s.length() == 0) return result;
result = restoreIpAddresses(s, 0, 0);
return result;
}
vector<string> restoreIpAddresses(string s,int start_pos,int index){
vector<string> temp;
if(start_pos>s.length()-1) return temp;
int max = 4;
if(s[start_pos]-48>2){
max = 3;
}
if(s[start_pos]-48 == 0){
max = 2;
}
if(index == 3){
if(s.length()-start_pos>max-1){
return temp;
}else{
stringstream ss;
ss<<s.substr(start_pos,s.length()-start_pos);
int temp_int;
ss>>temp_int;
if(temp_int>255) return temp;
temp.push_back(s.substr(start_pos,s.length()-start_pos));
return temp;
}
}
for(int i =1;i<max;i++){
stringstream ss;
ss<<s.substr(start_pos,i);
int temp_int ;
ss>>temp_int;
if(temp_int>255) return temp;
vector<string> result = restoreIpAddresses(s, start_pos+i,index+1);
for(int j =0;j<result.size();j++){
string temp_s = s.substr(start_pos,i)+"."+result[j];
temp.push_back(temp_s);
}
}
return temp;
}
};