还是backtrack的老套路,这里稍微变型了一下。
class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> res=new ArrayList<>();
backtrack(res,new StringBuffer(),s,0,0);
return res;
}
public void backtrack(List<String> res,StringBuffer str,String s,int level,int index){
if(level>4||index>s.length()) return;
if(level==4&&index==s.length()){
String ip=str.toString();
res.add(ip);
return;
}
for(int i=1;i<=3;i++){
if(index+i > s.length()) break;
String numStr=s.substring(index,index+i);
int num=Integer.parseInt(numStr);
if(i==1||i==2&&num>=10&&num<=99||i==3&&num>=100&&num<=255){
str.append(numStr);
if(level<3)str.append(".");
backtrack(res,str,s,level+1,index+i);
if(level<3)str.deleteCharAt(str.length()-1);
str.delete(str.length()-i,str.length());
}
}
}
}