【LeeCode中等バイトpython 3】93.IPアドレスの復元


もっと快適なレイアウトを見たい、もっと時間通りにプッシュして公衆番号に注目したい「あまり器用ではないプログラマー」は毎日8時に乾物プッシュがあり、微信はいつでもあなたの疑問に答えます.
93.IPアドレスpython 3を復元する
数値のみを含む文字列を指定し、それを復元し、可能なすべてのIPアドレスフォーマットを返します.
有効なIPアドレスは、ちょうど4つの整数(各整数は0から255の間にある)であり、整数の間には「.」が用いられる.区切る.
例:
入力:「2552511135」出力:[「255.255.1.135」、「255.255.11.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"])