class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> result = new LinkedList<>();
backcheck(s,0,"",0,"",result);
return result;
}
public void backcheck(String s,int index,String ip,int segI,String seg,List<String> result){
if(index == s.length() && segI == 3 && isVal(seg)){
result.add(ip + seg);
}else if(index < s.length() && segI <= 3){
char c = s.charAt(index);
if(isVal(seg + c)){
backcheck(s,index + 1,ip,segI,seg + c,result);
}
if(seg.length() > 0 && segI < 3){
backcheck(s,index + 1,ip + seg + ".",segI + 1,"" + c,result);
}
}
}
public boolean isVal(String seg){
return Integer.valueOf(seg) <= 255 && (seg.equals("0") || seg.charAt(0) != '0');
}
}