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地址
一看到这种就想到DFS,是不是该换换脑筋了
public class Solution {
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> res = new ArrayList<String>();
ArrayList<String> list = new ArrayList<String>();
dfs(res,s,list);
return res;
}
private void dfs(ArrayList<String> res,String s,ArrayList<String> list) {
if(s.length()>12)
return;
if(list.size()==4&&s.equals("")){
String tmp = "";
for(int i=0;i<list.size();i++)
tmp+=list.get(i)+".";
tmp=tmp.substring(0,tmp.length()-1);
res.add(tmp);
return;
}
int len = (3-list.size())*3;
if(len+1>=s.length()&&s.length()>=1){
list.add(s.substring(0,1));
dfs(res, s.substring(1), list);
list.remove(list.size()-1);
}
if(len+2>=s.length()&&s.length()>=2&&s.charAt(0)!='0'){
list.add(s.substring(0,2));
dfs(res, s.substring(2), list);
list.remove(list.size()-1);
}
if(s.length()>=3&&Integer.parseInt(s.substring(0,3))<=255&&s.charAt(0)!='0'){
list.add(s.substring(0,3));
dfs(res, s.substring(3), list);
list.remove(list.size()-1);
}
}
}