Restore IP Addresses
Question
Solution
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)
SOLUTION 1:
如果有跟过主页君的讲解,就会知道,这又是一道相当经典的DFS模板题目。 我们照样套用http://www.ninechapter.com/的递归
模板,退出条件是:path.size == 4.
在模板中,我们加入一些判断条件来中断循环:例如说判断pre的字符串转化后的数字是不是在255以内。
另外,我们要排除055这种数字,所以加入这一行判断:
if (s.charAt(index) == '0' && i > index) {
break;
}
虽然是很简单的递归题,但主页君是真心用心写了的。而且这是相当经典的递归模板。同学们一定要记住这种模板解法哦!
1 public List<String> restoreIpAddresses(String s) { 2 if (s == null) { 3 return null; 4 } 5 6 ArrayList<String> ret = new ArrayList<String>(); 7 ArrayList<String> path = new ArrayList<String>(); 8 9 dfs(s, 0, path, ret); 10 11 return ret; 12 } 13 14 public void dfs(String s, int index, ArrayList<String> path, ArrayList<String> ret) { 15 if (path.size() == 4) { 16 if (index == s.length()) { 17 StringBuilder sb = new StringBuilder(); 18 for (String str: path) { 19 sb.append(str); 20 sb.append('.'); 21 } 22 23 sb.deleteCharAt(sb.length() - 1); 24 ret.add(sb.toString()); 25 } 26 27 return; 28 } 29 30 int len = s.length(); 31 for (int i = index; i < index + 3 && i < len; i++) { 32 if (s.charAt(index) == '0' && i > index) { 33 break; 34 } 35 36 String pre = s.substring(index, i + 1); 37 int num = Integer.parseInt(pre); 38 if (num > 255) { 39 continue; 40 } 41 42 path.add(pre); 43 dfs(s, i + 1, path, ret); 44 path.remove(path.size() - 1); 45 } 46 }