描述:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135",
return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)
思路:
一个合法的ip地址包括4个部分,每个部分都要是小于255的一个数字,就是动态地取该数字串的某一部分且后一部分所取的位置都是在前一部分的基础上取得,最后得到四部分串后再去判断各个部分是否符合条件即可。
典型的动态规划问题,后一部分依赖于前一部分来完成。
当然在具体的编码过程中考虑到取完前面部分后后面的部分所表示的长度是否合法也是很必要的,这样可以省去许多后续的判定和字符串向整数的转换。
代码:
public List<String> restoreIpAddresses(String s) {
String str=s;
List<String>list=new ArrayList<String>();
if(str==null)
return list;
int strLen=str.length();
for(int i=1;i<4&&i<strLen-2;i++)
{
if(strLen-i>9)
continue;
for(int j=i+1;j<i+4&&j<strLen-1;j++)
{
if(strLen-j>6)
continue;
for(int k=j+1;k<j+4&&k<strLen;k++)
{
int a=Integer.parseInt(str.substring(0,i));
int b=Integer.parseInt(str.substring(i,j)) ;
int c=Integer.parseInt(str.substring(j,k)) ;
int d=Integer.parseInt(str.substring(k,strLen));
if(a>255||b>255||d>255||c>255)
continue;
String ip=a+"."+b+"."+c+"."+d;
if(ip.length()<strLen+3)
continue;
list.add(ip);
}
}
}
return list;
}