【LeeCode 中等 字节 python3】93. 复原IP地址

想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送,微信随时解答你的疑问

93. 复原IP地址 python3

中等 字节

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

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

示例:

输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

from typing import List


# 54%
# 执行用时:48 ms
# 内存消耗:13.5 MB
class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        n = len(s)
        ips = []

        def is_ipx(ipx):
            if int(ipx) > 255 or (ipx[0] == "0" and (int(ipx) > 0 or len(ipx) > 1)):
                return True
            return False

        for p1 in range(1, 4):
            ip1 = s[:p1]
            if p1 > n or p1 + 9 < n or is_ipx(ip1):
                continue
            for p2 in range(1, 4):
                ip2 = s[p1: p1+p2]
                if p1+p2 > n or p1 + p2 + 6 < n or is_ipx(ip2):
                    continue
                for p3 in range(1, 4):
                    ip3 = s[p1+p2: p1+p2+p3]
                    if p1+p2+p3 > n or p1 + p2 + p3 + 6 < n or is_ipx(ip3):
                        continue
                    for p4 in range(1, 4):
                        ip4 = s[p1+p2+p3: p1 + p2 + p3 + p4]
                        if p1 + p2 + p3 + p4 > n or p1 + p2 + p3 + p4 < n or is_ipx(ip4):
                            continue
                        ips.append(".".join([ip1, ip2, ip3, ip4]))
        return ips


s = Solution()
nums = "25525511135"
ret = s.restoreIpAddresses(nums)
print(ret)

nums = "2552551113"
ret = s.restoreIpAddresses(nums)
print(ret)

nums = "255251135"
ret = s.restoreIpAddresses(nums)
print(ret)

nums = "2552"
ret = s.restoreIpAddresses(nums)
print(ret)

nums = "2"
ret = s.restoreIpAddresses(nums)
print(ret)

nums = "010010"
ret = s.restoreIpAddresses(nums)
print(ret, ret == ["0.10.0.10", "0.100.1.0"])

你可能感兴趣的:(面试题,LeeCode,Python3,字符串,python,leetcode,列表)