93. Restore IP Addresses

93. Restore IP Addresses

0. 参考文献

序号 文献
1 [LeetCode] Restore IP Addresses 复原IP地址
2 【LeetCode】93. Restore IP Addresses 解题报告(Python & C++)

1. 题目

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"]

2. 思路

本题是判断给到的字符串能够组成的合法IP的数量。对于字符串的问题,如果是匹配或者是子序列的问题,优先考虑DP。但是本题显然不是。求解的办法是使用递归解决。要注意一点就是剪枝,不然Python下会超时。

3. 实现

class Solution(object):
    def restoreIpAddresses(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        if len(s) > 4 * 4:
            return
        ret = []
        self.restore(ret,"",4,s)
        return ret
        
    def restore(self,ret,tmpstr,k,instr):
        if len(instr) > k * 4:
            return
        if k == 0 and len(instr) ==0 :
            ret.append(tmpstr)
        else :
            for i in range(1,4) :
                if len(instr) >= i and  self.is_vaild(instr[0:i]):
                    if k == 1 :
                        self.restore(ret, tmpstr + instr[0:i], k-1, instr[i:])
                    else:
                        self.restore(ret, tmpstr + instr[0:i]+".", k-1, instr[i:])
                
    def is_vaild(self,s):
        if s == "" or len(s) > 3 or ( len(s) > 1 and s[0] == "0" ):
            return False
        tmp = int(s)

        return True if tmp <=255 and tmp >= 0 else False
posted @ 2019-08-12 12:15  bush2582  阅读(109)  评论(0编辑  收藏  举报