还是递归遍历所有可能的情况....
需要注意:
1. ip一共四块,每一块不能大于255
2. 当当前块为0时,这一块就只能为0(因为不可能出现1.1.010.1这样的ip地址),其余的两个方向(当前块继续增加)
3. 根据当前是第几块来判断“.”的添加....
public class Solution {
List<String> res;
public List<String> restoreIpAddresses(String s) {
res=new ArrayList<String>();
fun( s,0,-1,"",0 );
return res;
}
void fun( String s,int index,int num,String str,int bits )
{
if( num>255 )
{
return ;
}
if( bits>4 )
{
return ;
}
if( index>=s.length() )
{
if( bits==3&&num!=-1)
{
str+="."+num;
res.add(str);
}
return ;
}
if( num!=-1 )
{
String tmp=str;
if( bits==0 )
{
tmp+=num;
}
else
{
tmp+="."+num;
}
fun( s,index+1,s.charAt(index)-'0',tmp,bits+1);
if( num==0 )
{
return ;
}
}
if( num==-1 )
{
num=s.charAt(index)-'0';
}
else
{
num=num*10+s.charAt(index)-'0';
}
fun( s,index+1,num,str,bits);
}
}