public class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> result = new ArrayList<>();
String ip = "";
restoreIpAddressesHelper(s,result,ip,0,0);
return result;
}
private void restoreIpAddressesHelper(String s, List<String> result, String ip, int index, int step){
//end condition
if(step == 4 && index == s.length()){
result.add(ip.substring(0,ip.length()-1));
return;
}
//convergence condition
if(s.length()-index > (4-step)*3)
return;
if(s.length()-index < (4-step))
return;
//procedure
int num=0;
for(int i=index; i<index+3 && i<s.length(); i++){
num = num*10+(s.charAt(i)-'0');
if(num<256){
ip += s.charAt(i);
restoreIpAddressesHelper(s,result,ip+'.',i+1,step+1);
}
if(num == 0)
break;
}
}
}
分析:给定一个数字的string 数组,返回所有可能的IP地址。深搜确定结果,同时回溯获取所有可能的结果。
DP思路,前一个确定的片段都会影响下一个片段的结果,但是没有规律可循。DP失败
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)