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
return
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;
}
}
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;
}
}
相关文章推荐
- leetcode Restore IP Addresses
- LeetCode93 Restore IP Addresses
- restore ip addresses
- LeetCode:Restore IP Addresses
- Restore IP Addresses
- LeetCode——Restore IP Addresses
- Restore IP Addresses
- 093 Restore IP Addresses [Leetcode]
- LeetCode-Restore IP Addresses
- LeetCode OJ:Restore IP Addresses
- LeetCode Restore IP Addresses
- restore-ip-addresses
- Leetcode---Restore IP Addresses
- leetcode 125: Restore IP Addresses (uncompleted)
- leetcode:Restore IP Addresses 【Java】
- [JAVA]LeetCode93 Restore IP Addresses
- [leetcode刷题系列]Restore IP Addresses
- 【两类dfs总结】 Restore IP Addresses、Word Search、Subsets、带重复的全排列
- Restore IP Addresses
- [leetcode91]Restore IP Addresses(java)