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

Leetcode刷题记录——93. 复原IP地址_第1张图片
可以认为是动态规划
对于长度大于等于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)

你可能感兴趣的:(leetcode,python编程技巧)