Leetcode刷题记录——93. 复原IP地址

在这里插入图片描述
可以认为是动态规划
对于长度大于等于3 的输入str
我们先拆出str[0]单独成整数,
再看能否拆前两位,即str[0:2]单独成整数
要求str[0]!=‘0’
再看能否拆前三位,即str[0:3]单独成整数
要求str[0]!=‘0’ and int(str[0:3]) <= 255

上述任意种情况可以的话
搞一个tempres,把各自的整数对应的str和一个’.'放到tempres里

当tempres中有4个点,且tempres没在以前的结果中出现过
即可将tempres[:-1]放到最终的res数组中

class Solution:
    def __init__(self):
        self.res = []
    def restoreIpAddresses(self, s: str) -> List[str]:
        self.fun(s,'',0)
        return self.res
    def fun(self,input_str,this_res,point):
        if point == 4:
            if len(input_str) > 0:
                return
            else: 
                if this_res[:-1] not in self.res:
                    self.res.append(this_res[:-1]) 
                return
        if input_str == '':
            return
        this_res0 = ''
        this_res1 = ''
        this_res2 = ''
        for letter in this_res:
            this_res0 += letter
            this_res1 += letter
            this_res2 += letter
        this_res2 += (input_str[0]+'.')
        self.fun(input_str[1:],this_res2,point+1)
        if input_str[0] != '0':
            this_res1 += (input_str[0:2]+'.')
            self.fun(input_str[2:],this_res1,point+1)
            if int(input_str[0:3]) <= 255:
                this_res0 += (input_str[0:3]+'.')
                self.fun(input_str[3:],this_res0,point+1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值