leetcode-93-复原ip地址

题目描述:

方法一:暴力法

class Solution: 
    def restoreIpAddresses(self, s: str) -> List[str]: 
        n = len(s) 
        res = [] # 判读是否满足ip的条件 
        def helper(tmp): 
            if not tmp or (tmp[0] == "0" and len(tmp) > 1) or int(tmp) > 255: 
                return False 
            return True 
        # 三个循环,把数字分成四份 
        for i in range(3): 
            for j in range(i + 1, i + 4): 
                for k in range(j + 1, j + 4): 
                    if i < n and j < n and k < n: 
                        tmp1 = s[:i + 1] 
                        tmp2 = s[i + 1:j + 1] 
                        tmp3 = s[j + 1:k + 1] 
                        tmp4 = s[k + 1:] 
                        # print(tmp1, tmp2, tmp3, tmp4) 
                        if all(map(helper, [tmp1, tmp2, tmp3, tmp4])): 
                            res.append(tmp1 + "." + tmp2 + "." + tmp3 + "." + tmp4) 
        return res

方法二;回溯

class Solution: 
    def restoreIpAddresses(self, s: str) -> List[str]: 
        res = [] 
        n = len(s) 
        def backtrack(i, tmp, flag): 
            if i == n and flag == 0: 
                res.append(tmp[:-1]) 
                return 
            if flag < 0: 
                return 
            for j in range(i, i + 3):
                if j < n: 
                    if i == j and s[j] == "0": 
                        backtrack(j + 1, tmp + s[j] + ".", flag - 1) 
                        break 
                    if 0 < int(s[i:j + 1]) <= 255: 
                        backtrack(j + 1, tmp + s[i:j + 1] + ".", flag - 1) 
        backtrack(0, "", 4) 
        return res

 

posted @ 2019-07-13 17:12  oldby  阅读(301)  评论(0编辑  收藏  举报