1. 程式人生 > 實用技巧 >Leetcode 93 Restore IP Address

Leetcode 93 Restore IP Address

題目介紹

給定只包含數字的字串,判斷是否是合法的IP地址。

Examples:

Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]

Solution

合法的IP地址應當是:

  1. 只由四個部分組成
  2. 每一部分從0255
  3. 除了0本身,不能包含前導0

可以使用回溯的方法來實現:

class Solution(object):
    def restoreIpAddresses(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        ans = []

        def helpfunc(i, res):
            # 已經有三個部分,剩餘的部分大於3位數,直接返回
            if len(res) == 3 and len(s) - i > 3:
                return
            # 超出四個部分或者不足以湊夠四個部分,直接返回
            if i > len(s) or len(res) > 4:
                return
            if len(res) == 4 and i == len(s):
                ans.append(".".join(res))
                return
            
            if i < len(s):
                # 單個數字
                helpfunc(i + 1, res + [s[i]])
                # 兩位數
                if len(s) - i >= 2:
                    if int(s[i]) > 0:
                        helpfunc(i + 2, res + [s[i:i + 2]])
                # 三位數
                if len(s) - i >= 3:
                    if int(s[i]) != 0 and int(s[i:i + 3]) <= 255:
                        helpfunc(i + 3, res + [s[i:i + 3]])
        helpfunc(0, [])
        return ans