
求解代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
ArrayList<String> ans = new ArrayList<>();
public ArrayList<String> restoreIpAddresses (String s) {
if(s==null||s.length()<4||s.length()>12){
return ans;
}
StringBuilder sb = new StringBuilder();
dfs(s,sb,0,0);
return ans;
}
private void dfs(String s,StringBuilder sb,int step,int index){
if(step==4){
if(index==s.length()){
ans.add(sb.toString());
}
return;
}else{
for(int i=index;i<index+3&&i<s.length();i++){
String cur = s.substring(index,i+1);
if(Integer.parseInt(cur)>255||(cur.length()>1&&cur.charAt(0)=='0')){
continue;
}
sb.append(cur);
if(step<3){
sb.append('.');
}
dfs(s,sb,step+1,i+1);
if(step<3){
sb.deleteCharAt(sb.length()-1);
}
sb.delete(sb.length()-cur.length(), sb.length());
}
}
}
|
小贴士
sb.delete(sb.length()-cur.length(), sb.length())这行代码是删除字符串中「从sb.length()-cur.length()索引(包含)到sb.length()索引(不包含)」的所有字符,是一个左闭右开区间。
说人话就是:
删除 StringBuilder 中最后面的、长度等于 cur 的所有字符,也就是是把之前拼接的当前 IP 段 cur 从 sb 中删掉,恢复 sb 到拼接 cur 前的状态。