leetcode第93题复原 IP 地址--DFS(回溯)

 这个题还是普通型回溯算法,问题就是在解决先导0的写法上,我直接用的step对应的上限和下限,举个例子:

如果step==0,说明只读一个单位长度的字符,所以范围在0~9(其实就是没限制);

但是如果step==1,说明读入两个单位长度字符,转成的数字最小是10就可以解决先导0;

同样step==2,读入三个字符,转数字最小是100解决先导0,但是最大是255

class Solution(object):
    def restoreIpAddresses(self, s):
        ans=[]
        temp=[]
        dict_ip={       #这个字典用来解决先导0和上限,其实只有step==2时存在上限255
            0:[0,9],
            1:[10,99],
            2:[100,255]
        }
        len_s=len(s)
        def DFS(i,deepth):
            if deepth==4:
                if i==len_s:
                    ans.append('.'.join(temp[:]))
            else:
                for step in range(3):
                    if i+step<len_s :
                        temp_int= int(s[i:i + step + 1])
                        if temp_int>=dict_ip[step][0] and temp_int<=dict_ip[step][1]:#解决先导0和上限255
                            temp.append(s[i:i+step+1])
                            DFS(i+step+1,deepth+1)
                            temp.pop(-1)
        DFS(0,0)
        return ans

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值