题目:Restore IP Addresses
难度:medium
问题描述:
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)
解题思路:
使用Backtracking 回溯法加上剪枝就可快速算出结果。注意,0.0.0.0是合法值,025.1.1.1中的025是不合法的,25.1.1.1是合法的。
具体代码如下:
public class m_93_RestoreIPAddresses {
public List<String> restoreIpAddresses(String s) {
List<String> res=new ArrayList<>();
if(s==null){
return res;
}
diedai(res,0,1,s,"");
return res;
}
public void diedai(List<String> res,int index,int step,String s,String temp){
int value;
String tail;
if(s.length()-index>(5-step)*3||(s.length()-index)<(5-step)){
return;
}
if(step==4){
tail=s.substring(index);
if(tail.length()>1&&tail.charAt(0)=='0'){
return;
}
try{
value=Integer.valueOf(tail);
if(value>255){
//尾部错误
return;
}else{
temp+=tail;
System.out.println(temp);
res.add(temp);
return;
}
}catch(NumberFormatException e){
return;
}
}
for(int i=0;i<3&&index+i+1<=s.length();i++){
tail=s.substring(index, index+1+i);
if(tail.length()>1&&tail.charAt(0)=='0'){
return;
}
try{
value=Integer.valueOf(tail);
if(value>255){
break;
}else{
diedai(res,index+i+1,step+1,s,temp+(tail+"."));
}
}catch(NumberFormatException e){
}
}
}
public static void main(String[]args){
m_93_RestoreIPAddresses s=new m_93_RestoreIPAddresses();
s.restoreIpAddresses("010010");
}
}