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)
[code]
public class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> list=new ArrayList<String>();
if(s==null || s.length()==0)return list;
String[] path=new String[4];
Arrays.fill(path, "");
helper(0, 0, path, s, list);
return list;
}
void helper(int index, int count, String[] path, String s, List<String> list)
{
if(index==s.length() && count==path.length)
{
StringBuffer sb=new StringBuffer();
for(int i=0;i<path.length;i++)sb.append(path[i]).append('.');
sb.deleteCharAt(sb.length()-1);
list.add(sb.toString());
return;
}
if(index==s.length() || count==path.length)return;
for(int i=1;i<=3 && index+i<=s.length();i++)
{
int value=getVal(s.substring(index, index+i));
if(value>255 || value<0)break;
path[count]=s.substring(index, index+i);
helper(index+i, count+1, path, s, list);
}
}
int getVal(String s)
{
int r=0;
for(int i=0;i<s.length();i++)
{
r*=10;
r+=(int) (s.charAt(i)-'0');
}
if(s.charAt(0)=='0' && s.length()>1)return -1;
return r;
}
}