class Solution {
private List<String> res = new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
if(s.length() > 12) return res;
backTracking(s,0,0);
return res;
}
private void backTracking(String s,int startIndex,int pointCount){
if(pointCount == 3){
if(isValid(startIndex,s.length()-1,s)){
res.add(s);
}
}
for(int i = startIndex;i < s.length();i++){
if(isValid(startIndex,i,s)){
s = s.substring(0,i+1)+"."+s.substring(i+1);
pointCount++;
backTracking(s,i+2,pointCount);
pointCount--;
s = s.substring(0,i+1)+s.substring(i+2);
}else {
return;
}
}
}
private boolean isValid(int start,int end,String s){
if(start > end){
return false;
}
if(s.charAt(start) == '0' && start != end){
return false;
}
int num = 0;
for(int i = start;i <= end;i++){
if(s.charAt(i) > '9' || s.charAt(i) < '0'){
return false;
}
num = num * 10 + (s.charAt(i)-'0');
if(num > 255){
return false;
}
}
return true;
}
}
难点:ip地址的校验规则,"."符号的插入与回溯