给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
IP地址:
- 分为四个部分,各部分之间用点分隔。
- 每个部分数字大小不能超过255,且不能有前导0。
思路:
- 每个部分从一位数开始dfs,没有用完整个字符串就回溯;
- 对于当前部分,小于等于255时才dfs;
- 对于一个部分有超过一位数且最高位为0的情况不进行dfs,避免前导0的情况。
代码如下:
class Solution {
List<String> ans;
public List<String> restoreIpAddresses(String s) {
ans = new ArrayList();
dfs(s, "", 0);
return ans;
}
public void dfs(String s, String path, int k){
if(k == 4 || s.length() == 0){
if(k == 4 && s.length() == 0) ans.add(path);
return ;
}
for(int i=0; i<s.length() && i<=2; i++){
if(i != 0 && s.charAt(0) == '0') break;
String prefix = s.substring(0, i+1);
if(Integer.valueOf(prefix) <= 255){
dfs(s.substring(i+1), path.length() != 0 ? path + "." + prefix : prefix, k+1);
}
}
}
}
总结
- IP地址的形式
- Integer.valueOf(String s):返回字符串所代表的整型数据
- s.substring(int beginIndex, int endIndex):取子串