题目所属分类
直接dfs暴力搜索
原题链接
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
代码案例:输入:s = “25525511135”
输出:[“255.255.11.135”,“255.255.111.35”]
题解
class Solution {
List<String> ans = new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
int n = s.length();
dfs(s,0,n,0,"");//k表示当前个数
return ans ;
}
public void dfs(String s, int u , int n ,int k ,String path){
if(u == n ){
if(k == 4) ans.add(path.substring(0,path.length()-1));
return ;
}
if(k == 4) return ;//不过不够四位的话
//遍历当前第K个数 t表示当前的数
for(int i = u , t = 0 ; i < n ; i ++){
//此时的个数是大于当前位 意思就是每四个里面存在东西 i>u
if(i > u && s.charAt(u) == '0') break ;//前导0
t = t*10 + s.charAt(i) - '0' ;
if(t <= 255) dfs(s,i+1,n ,k+1,path +String.valueOf(t)+'.');
else break ;
}
}
}