Question:
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)
public class Solution {
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> result = new ArrayList<String>();
String ip = "";
dfs(s,0,0,ip,result);
return result;
}
private void dfs(String s, int start, int step, String ip, ArrayList<String> result) {
if(start==s.length()&&step==4){
ip = ip.substring(0,ip.length()-1);
result.add(ip);
return;
}
if(s.length()-start>(4-step)*3)
return;
if(s.length()-start<(4-step))
return;
int num = 0;
for(int i=start;i<start+3;i++){
if(i>=s.length()){
break;
}
num = num*10+(s.charAt(i)-'0');
if(num<=255){
ip+=s.charAt(i);
dfs(s,i+1,step+1,ip+'.',result);
}
if(num==0)
break;
}
}
}