public static List<String> restoreIpAddresses(String s) {
List<String> ans=new ArrayList<>();
backtrack(s,ans,new StringBuffer(s),0,0);
return ans;
}
public static void backtrack(String s,List<String> ans,StringBuffer ip,int idx,int num){
if(num==3)
{
if(isValid(idx,s.length(),s))
ans.add(new String(ip));
return;
}
for (int i = idx; i < s.length(); i++) {
if(isValid(idx,i+1,s))
{
ip.insert(i+1+num,".");
backtrack(s,ans,ip,i+1,num+1);
ip.replace(i+1+num,i+2+num,"");
}
}
}
public static boolean isValid(int begin,int end,String s){
if(begin>=end||s.charAt(begin)=='0'&&end-begin>=2)
return false;
if(Long.parseLong(s.substring(begin,end))>255)
return false;
return true;
}