leetcode-93. 复原IP地址

题目

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。

示例:

输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]

解题思路

回溯法。

f(已有的字符串, 剩下的段数, 剩下的字符串)为能够输出最终结果的函数,则检查剩下的字符串长度与剩下的段数是否匹配,若匹配,则用前1~3个字符来组成本段的内容,继续向下即可。

代码

class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        ans = []
        def backtrace(prev_s: List, remain_n: int, remain_s: str) -> None:
            if remain_n == 0 and not remain_s:
                ans.append('.'.join(prev_s))
                return
            if 1 * remain_n <= len(remain_s) <= 3 * remain_n:
                if remain_s[0] == '0':
                     backtrace(prev_s + [remain_s[0]], remain_n - 1, remain_s[1:])
                else:
                    index = 0
                    while index < 3 and index < len(remain_s):
                        if int(remain_s[:index + 1]) <= 255:
                            backtrace(prev_s + [remain_s[:index + 1]], remain_n - 1, remain_s[index + 1:])
                        index += 1
            return
        backtrace([], 4, s)
        return ans

你可能感兴趣的:(OJ题目记录)