求解代码
ArrayList<String>ans=newArrayList<>();publicArrayList<String>restoreIpAddresses(Strings){if(s==null||s.length()<4||s.length()>12){returnans;}StringBuildersb=newStringBuilder();dfs(s,sb,0,0);returnans;}privatevoiddfs(Strings,StringBuildersb,intstep,intindex){if(step==4){if(index==s.length()){ans.add(sb.toString());}return;}else{for(inti=index;i<index+3&&i<s.length();i++){Stringcur=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 前的状态。