标签:
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)
思路分析:这题一看就想到可以用搜索DFS解决,但是实现的时候还是走了不少弯路。基本思路是不断的取子串,看是否合法,如果合法继续递归取子串组成IP地址。有几个要注意的地方:第一,判断IP地址是否合法的时候,要看是否在0-255之间,并且长度不超过3,并且长度大于2的子串首字符不能是0。第二,如果用裸DFS,这题是会超时的,根据这题的特点,一个明显的减枝策略是我们知道每个合法IP地址一定只有4个子串,因此,树的层次树不会超过4层,到第4层后就没有必要再递归下去。剩下的就是基本DFS问题的套路了,递归中套for循环,for循环中递归调用。第三,DFS递归调用时不要先修改item内容再传入,而是把item作为参数一部分直接传入,这样递归调用返回item和start才能仍然保持同步,自动恢复现场,start要始终指向item最后一个字符的相邻下一个字符。 DFS/BFS搜索这类题在面试中非常常见,几乎必考,有些题目实现还有tricky的地方,比如这题的减枝策略,要多加练习。因为是NP问题,时间复杂度指数级,但是树的层次树不会超过4.
AC Code
public class Solution { public List<String> restoreIpAddresses(String s) { List<String> res = new ArrayList<String>(); if(s.length() == 0) return res; dfs(res, s, 0, "", 1); return res; } void dfs(List<String> res, String s, int start, String item, int segmentIndex){ //use segmentIndex to memorize the number of segments //An IP address only have 4 segments, which could be used as pruning condition if(start >= s.length()) { return; } if(segmentIndex == 4){ String substr = s.substring(start); if(isValidIPAddress(substr)){ res.add(item + "." + substr); } return; } for(int i = 1; i < 4 && ((start + i) <= s.length()); i++){ String substr = s.substring(start, start + i); if(isValidIPAddress(substr)){ if(segmentIndex == 1){ dfs(res, s, start + i, substr, segmentIndex + 1); } else { //Here we can‘t modify the content of item //Since we want item always match start //When segment == 4 and return, we hope the content of item //and start to restore in the same time dfs(res, s, start + i, item + "." + substr, segmentIndex + 1); } } } } boolean isValidIPAddress(String substr){ if(substr.length() >=4 || substr.isEmpty()) return false; if(substr.charAt(0) == ‘0‘ && substr.length() > 1) return false; int temp = Integer.parseInt(substr); if(temp >= 0 && temp <= 255){ return true; } return false; } }
标签:
原文地址:http://blog.csdn.net/yangliuy/article/details/43915517