class Solution {
List<String> ans=new ArrayList<String>();
int[] temp=new int[4];
public List<String> restoreIpAddresses(String s) {
dfs(s,0,0);
return ans;
}
void dfs(String s,int id,int start){
if(id==4){
if(start==s.length()){
StringBuffer ip=new StringBuffer();
for(int i=0;i<4;++i){
ip.append(temp[i]);
if(i!=3){
ip.append('.');
}
}
ans.add(ip.toString());
}
return;
}
if(start==s.length()){
return;
}
if(s.charAt(start)=='0'){
temp[id]=0;
dfs(s,id+1,start+1);
}
int addr=0;
for(int end=start;end<s.length();++end){
addr=addr*10+(s.charAt(end)-'0');
if(addr>0&&addr<=255){
temp[id]=addr;
dfs(s,id+1,end+1);
}else{
break;
}
}
}
}
这种稍微复杂的回溯就不行了,还是要多练呀。