题目
这道题主要应用dfs,遍历所有的情形,并对他们进行判断。其中并没有用到剪枝。
class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> res = new ArrayList<>();
if(s.length()==0 || s.length()>12) return res;
dfs(s,0,"",res);
return res;
}
public void dfs(String s,int start,String sb,List<String> res){
if(start>3) return;
if(start==3 && isvalid(s)){
res.add(sb+s);
return;
}
for(int i=0;i<3 && i<s.length();i++){
String sub = s.substring(0,i+1);
if(isvalid(sub)){
dfs(s.substring(i+1,s.length()),start+1,sb+sub+".",res);
}
}
}
public boolean isvalid(String s){
if(s.length()==0) return false;
if(s.charAt(0)=='0'){
return s.equals("0");
}
if(Integer.parseInt(s)<=255 && Integer.parseInt(s)>0){
return true;
}
return false;
}
}