LeetCode93-20.8.9-复原IP地址

本文详细解析了LeetCode93题目,通过递归算法解决IP地址恢复问题,重点介绍了状态变换、剪枝技巧及代码实现。

题目链接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);
            }
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值