简单易懂思路:递归遍历字符串的每一位,由于每一位只可能是以下两种情况:与前面几位组成未满255,仍能继续往后结合的,与前面几位组成未满255,需要在该位后面加'.'的。因此,在递归种把这两种情况分离即可。采用一个list记录下每个'.'之间的数字,并且结束递归时,这个list的长度应该为4,因为IP地址有4段。最后每个字符串中,符合IP地址的字符串一定比原串长度大3(因为加了3个'.'),
public class Solution {
ArrayList<String> res = new ArrayList<>();
public ArrayList<String> restoreIpAddresses (String s) {
func(0,0,s,new ArrayList<Integer>());
return res;
}
public void func(int index,int cur,String s,ArrayList<Integer> templist){
if(index==s.length()){
if(templist.size()==4){
String str = "";
for(int i=0;i<templist.size();++i){
if(templist.size()-1!=i)
str+=templist.get(i)+".";
else str+=templist.get(i);
}
if(str.length()!=s.length()+3)return;
res.add(str);
}
return ;
}
int temp = cur*10+s.charAt(index)-'0';
if(temp>=0&&temp<=255){
func(index+1,temp,s,new ArrayList<Integer>(templist));
templist.add(temp);
func(index+1,0,s,new ArrayList<Integer>(templist));
}
}
}