给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
思路:回溯法。
这题没有想象那么难,规则有点东西。用回溯就能做 击败81%,我将每次返回的list,拼接起来,再进行剪枝
当遇上前缀的0时候,eg: “010010” 我用 if (mid.length()>1 && mid.startsWith(“0”)) break;剪枝就好了。
public List<String> restoreIpAddresses(String s) {
List<String> list = new ArrayList<>();
dfs(list,new ArrayList<Integer>(),s);
return list;
}
public void dfs(List<String> list,ArrayList<Integer> tmp,String s ) {
if (tmp.size() == 4 && s.length()>0)
return;
if (s == null || s.length() == 0 && tmp.size() == 4)
{
String str = "";
for (int i = 0;i < tmp.size()-1;i++) {
str = str + tmp.get(i) + ".";
}
str = str + tmp.get(tmp.size()-1);
list.add(str);
return;
}
for (int i = 1;i <=s.length()&& i<4;i++) {
String mid = s.substring(0,i);
if (mid.length()>1 && mid.startsWith("0"))
break;
if (Find(mid)) {
tmp.add(Integer.valueOf(mid));
dfs(list,tmp,s.substring(i,s.length()));
tmp.remove(tmp.size()-1);
}
}
}
public boolean Find(String str) {
Integer i = Integer.valueOf(str);
if (i > 255)
return false;
else
return true;
}