思路
有效的IP地址是由4个0255之间的整数组成,并且每个整数不能包含前导0。255之间。
因为我们每次都需要在字符串中间加入.号,所以我们可以判断.号的数量,如果数量等于3,那么就已经分割出来了四个整数,那么就可以作为终止条件。
为了能够快速排查出不符合条件的情况,所以我们每次得到一个整数之后都需要进行判断,判断其是否没有前导0,并且是否在0
代码
java
class Solution {
List<String> result;
public List<String> restoreIpAddresses(String s) {
result = new ArrayList<>();
StringBuilder sb = new StringBuilder(s);
backtracking(sb,0,0);
return result;
}
public void backtracking(StringBuilder s ,int startIndex, int dotNum){
if(dotNum == 3){
if(check(s,startIndex,s.length()-1)){
result.add(s.toString());
return;
}
}
for(int i=startIndex;i<s.length();i++){
if(check(s,startIndex,i)){
s.insert(i+1,'.');
dotNum++;
backtracking(s,i+2,dotNum);
dotNum--;
s.deleteCharAt(i+1);
}else
break;
}
}
//判断每次分割出来的整数是否合法
public boolean check(StringBuilder s, int start,int end){
if(start>end) return false;
//如果存在前导0,那么不合法
if(s.charAt(start)=='0' && start!=end) return false;
int num=0;
for(int i=start;i<=end;i++){
int temp = s.charAt(i)-'0';
num=num*10+temp;
if(num>255)
return false;
}
return true;
}
}