题目链接:LeetCode93
分析:开始觉得还行,刚睡醒有点头昏,想得不是很清楚,细节没考虑到,wrong了很多次,主要想法是状态的变换,每一段的不同取法代表不同变换,有些状态可以到达终点,有些不行,判断就行,但就是这个判断要想清楚,剪枝,也就是提前终止不能到达目的地的状态,这也要想好。
思路:选择了递归,觉得递归通用一些
代码:就我代码来看,可以看出我头脑不是很清楚。
class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> ans=new ArrayList<>();
dfs(s,0,"",0,ans);
return ans;
}
public void dfs(String s,int i,String ip,int cnt,List<String> list){
if(s.length()-i<4-cnt)return;
if(s.length()-i>3*(4-cnt))return;
if(cnt==4){
list.add(ip);
}
String hh=".";
if(cnt==3)hh="";
for(int j=1;j<=3;j++){
if(i+j<=s.length()){
char a=s.charAt(i);
if(a=='0'&&j!=1)continue;
if(j==3){
char b=s.charAt(i+1),c=s.charAt(i+2);
if(a>'2'||a=='2'&&b>'5'||a=='2'&&b=='5'&&c>'5')continue;
}
dfs(s,i+j,ip+s.substring(i,i+j)+hh,cnt+1,list);
}
}
}
}
本文详细解析了LeetCode93题目,通过递归算法解决IP地址恢复问题,重点介绍了状态变换、剪枝技巧及代码实现。

被折叠的 条评论
为什么被折叠?



