class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
restoreSegments(result,"",0,s);
return result;
}
void restoreSegments(vector<string>& result,string tempstring,int k,string s){
if(k==4 && s.size()<=0){
result.push_back(tempstring.substr(0,tempstring.size()-1));
return ;
}
if(k>4 || s.size()<=0){
return ;
}
if(s.substr(0,1)=="0"){
tempstring += "0.";
restoreSegments(result,tempstring,k+1,s.substr(1));
}else{
if(s.size()>=3 && s.substr(0,3)<="255"){
restoreSegments(result,tempstring + s.substr(0,3) + ".",k+1,s.substr(3));
}
if(s.size()>=2){
restoreSegments(result,tempstring + s.substr(0,2) + ".",k+1,s.substr(2));
}
restoreSegments(result,tempstring + s.substr(0,1) + ".",k+1,s.substr(1));
}
}
};
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
restoreSegments(result,"",0,s);
return result;
}
void restoreSegments(vector<string>& result,string tempstring,int k,string s){
if(k==4 && s.size()<=0){
result.push_back(tempstring.substr(0,tempstring.size()-1));
return ;
}
if(k>4 || s.size()<=0){
return ;
}
if(s.substr(0,1)=="0"){
tempstring += "0.";
restoreSegments(result,tempstring,k+1,s.substr(1));
}else{
if(s.size()>=3 && s.substr(0,3)<="255"){
restoreSegments(result,tempstring + s.substr(0,3) + ".",k+1,s.substr(3));
}
if(s.size()>=2){
restoreSegments(result,tempstring + s.substr(0,2) + ".",k+1,s.substr(2));
}
restoreSegments(result,tempstring + s.substr(0,1) + ".",k+1,s.substr(1));
}
}
};