class Solution {
List<String> res = new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
backTracking(s,0,0);
return res;
}
public void backTracking(String s,int startIndex,int pointSum){
if(pointSum == 3){
if(isValid(s,startIndex,s.length()-1)){
res.add(s);
return;
}
}
for(int i=startIndex; i<s.length(); i++){
if(isValid(s,startIndex,i)){
// 添加 .
s = s.substring(0,i+1) + "."+s.substring(i+1);
// 逗点数量+1
pointSum++;
backTracking(s,i+2,pointSum);
pointSum--;
// i+1 为.的位置
s = s.substring(0,i+1) + s.substring(i+2);
}else{
continue;
}
}
}
public boolean isValid(String s,int left,int right){
if(left > right){
return false;
}
// 1. 含有前导0的不合法
if(left!=right && s.charAt(left)=='0'){
return false;
}
// 2. 有无效字符的不合法
int sum = 0;
for(int i=left; i<=right; i++){
char c = s.charAt(i);
if(c > '9' || c < '0'){
return false;
}
// 3. 大于255的不合法
sum = sum * 10 + (s.charAt(i)-'0');
if(sum > 255){
return false;
}
}
return true;
}
}
运行结果: