93. 复原 IP 地址
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
根据.分割出递归部分。可以用三种情况:1,2,3位。截取不同的位数,判断合法性,之后交给下一层继续逻辑。
List<String> ret = new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
dfs(s,0,"",0);
return ret;
}
// 本质是还是组合的问题,拼接字符串
// 当前位置有3中清空,1,2,3位,一次遍历。
public void dfs(String s, int index, String str,int count) {
if(count > 4) {
return;
}
if(s.length() == index && count == 4) {
ret.add(str);
return;
}
for(int i=index;i<index+3 && i<s.length();i++) {
String num = s.substring(index,i+1);
if(num.startsWith("0") && num.length() != 1) {
continue;
}
if(Integer.valueOf(num) > 255) {
continue;
}
// 下一层的开始位置是i+1
dfs(s,i+1,str.length() == 0 ? num : str+"."+num,count+1);
}
}