A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁强 中级黑马   /  2019-10-16 09:10  /  1413 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
解题思路
DFS。搭配较多的剪枝可加快速度。
代码
Python 3.6
[Python] 纯文本查看 复制代码
class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        length = len(s)
        if length < 4 or length > 12:
            return []
        res = []
        self.__dfs(s, 0, length, [], res)
        return res
    
    def __dfs(self, s, start, length, path, res):
        blank = 4 - len(path)
        if blank == 0:
            if start >= length:
                res.append(".".join(path.copy()))
            return
        if (length - start < blank) or (length - start > 3 * blank):
            # 剩下的数字比空还少 或 比3*空还多
            return
        for i in range(1, 4):
            end = start + i
            if end > length or int(s[start:end]) > 255 or (i > 1 and s[start:end][0] == "0"):
                # 不合法:超过255、非单个数字且首位为0
                break
            path.append(s[start:end])
            self.__dfs(s, end, length, path, res)
            path.pop()

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马