您的位置:首页 > 其它

Restore IP Addresses

2014-02-09 12:25 239 查看
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)

Analysis: DFS. We can optimize a little bit during the recursion to avoid compute some unnecessary cases. Note something like "10.020.255.255" is meaningless. 

public class Solution {
public void restoreIpAddress(String s, ArrayList<String> res, StringBuilder tem, int len, int level) {
if(level == 4) {
if(len==s.length()) res.add(tem.toString());
return;
}

for(int i=len+1; i<=len+3; i++) {
if(i<=s.length() && s.length()-i>=3-level && s.length()-i<=(3-level)*3) { // optimaization
String current = s.substring(len, i);
if(Integer.valueOf(current)>=0 && Integer.valueOf(current)<=255) {
if(current.length()>1 && current.charAt(0)=='0') continue; // cannot start from a '0'
tem.append(current);
if(level!=3) tem.append(".");
restoreIpAddress(s, res, tem, i, level+1);
if(level!=3) tem.delete(tem.length()-1-(i-len), tem.length());
else tem.delete(tem.length()-(i-len), tem.length());
}
}
}
return;
}

public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> res = new ArrayList<String>();
StringBuilder tem = new StringBuilder();
restoreIpAddress(s, res, tem, 0, 0); // the init value of level should be 0!!!
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: