LeetCode 93

LeetCode 93. Restore IP Addresses

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

Example:

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

解题思路

由题意,需要编写程序来分割一个给定的字符串,使得其能够表示为一个合法的IP地址。首先分割好的字符串需要满足IP地址的格式和数据范围,其次需要找到所有合法的分割方法。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。了解IP地址的格式和数据范围之后,由于可以从头到尾分割字符串,IP地址一共有4个部分,故可以运用递归的思想。在每一层递归中,判断接下来的数字是否符合要求,如果符合要求就加入当前组合。当组合满足条件:包含给定字符串的所有数字,且包含4个部分时,该分割就结束了。

源代码

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

    def match(self, length, s, start):
        if length == 1:
            return True
        if length == 2 and s[start] != "0":
            return True
        if length == 3 and s[start] != "0" and int(s[start:start + length]) <= 255:
            return True
        return False

    def dfs(self, s, start, depth, path, ans):
        if depth == 4:
            if start == len(s):
                ans.append(path[:-1])
            return
        for length in xrange(1, 4):
            if start + length <= len(s):
                if self.match(length, s, start):
                    self.dfs(s, start + length, depth + 1, path + s[start:start + length] + ".", ans)

猜你喜欢

转载自blog.csdn.net/abyssalseaa/article/details/80126978
93