LeetCode-93. 复原 IP 地址【字符串 回溯】

LeetCode-93. 复原 IP 地址【字符串 回溯】

题目描述:

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。

例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

示例 1:

输入:s = “25525511135”
输出:[“255.255.11.135”,“255.255.111.35”]
示例 2:

输入:s = “0000”
输出:[“0.0.0.0”]
示例 3:

输入:s = “101023”
输出:[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]

提示:

1 <= s.length <= 20
s 仅由数字组成
代码随想录

解题思路一:回溯

class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        result = []
        self.backtracking(s, 0, 0, "", result)
        return result

    def backtracking(self, s, start_index, point_num, current, result):
        if point_num == 3:  # 逗点数量为3时,分隔结束
            if self.is_valid(s, start_index, len(s) - 1):  # 判断第四段子字符串是否合法
                current += s[start_index:]  # 添加最后一段子字符串
                result.append(current)
            return

        for i in range(start_index, len(s)):
            if self.is_valid(s, start_index, i):  # 判断 [start_index, i] 这个区间的子串是否合法
                sub = s[start_index:i + 1]
                self.backtracking(s, i + 1, point_num + 1, current + sub + '.', result)
            else:
                break

    def is_valid(self, s, start, end):
        if start > end:
            return False
        if s[start] == '0' and start != end:  # 0开头的数字不合法
            return False
        num = 0
        for i in range(start, end + 1):
            if not s[i].isdigit():  # 遇到非数字字符不合法
                return False
            num = num * 10 + int(s[i])
            if num > 255:  # 如果大于255了不合法
                return False
        return True

时间复杂度: O(3^4),IP地址最多包含4个数字,每个数字最多有3种可能的分割方式,则搜索树的最大深度为4,每个节点最多有3个子节点。
空间复杂度: O(n)

背诵版

class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        res = []
        self.backtracking(s, 0, [], res)
        return res

    def backtracking(self, s, start, path, res):
        if start == len(s) and len(path) == 4:
            res.append('.'.join(path))
            return 
        if len(path) > 4:
            return
        for i in range(start, min(len(s), start + 3)):
            if self.isValid(s, start, i):
                sub = s[start:i + 1]
                path.append(sub)
                self.backtracking(s, i+1, path, res)
                path.pop()

    def isValid(self, s, start, end):
        if start > end:
            return False
        if s[start] == '0' and start != end:
            return False
        num = int(s[start:end + 1])
        return 0 <=num <= 255

时间复杂度: O(3^4),IP地址最多包含4个数字,每个数字最多有3种可能的分割方式,则搜索树的最大深度为4,每个节点最多有3个子节点。
空间复杂度: O(n)

解题思路三:0


时间复杂度: O(3^4),IP地址最多包含4个数字,每个数字最多有3种可能的分割方式,则搜索树的最大深度为4,每个节点最多有3个子节点。
空间复杂度: O(n)


创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

相关推荐

  1. leetcode93. 复原 IP 地址

    2024-06-07 04:58:04       48 阅读
  2. leetcode 93. 复原 IP 地址

    2024-06-07 04:58:04       70 阅读
  3. LeetCode 93. 复原 IP 地址

    2024-06-07 04:58:04       56 阅读
  4. LeetCode 93. 复原 IP 地址

    2024-06-07 04:58:04       40 阅读
  5. leetcode93.复原IP地址

    2024-06-07 04:58:04       39 阅读
  6. 力扣:93. 复原 IP 地址回溯

    2024-06-07 04:58:04       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 04:58:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 04:58:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 04:58:04       82 阅读
  4. Python语言-面向对象

    2024-06-07 04:58:04       91 阅读

热门阅读

  1. 网络编程介绍(IP)(一)

    2024-06-07 04:58:04       28 阅读
  2. 大型ERP设计-业务与功能指引:物料状态

    2024-06-07 04:58:04       25 阅读
  3. C#中的值类型与引用类型

    2024-06-07 04:58:04       28 阅读
  4. 黑龙江等保测评:强化网络安全的北方防线

    2024-06-07 04:58:04       27 阅读
  5. C# SolidWorks 二次开发-显示配置

    2024-06-07 04:58:04       32 阅读
  6. 【CMake系列】00-CMake学习目录

    2024-06-07 04:58:04       27 阅读
  7. Lf工作流自定义html节点

    2024-06-07 04:58:04       24 阅读
  8. 023、键管理_数据库

    2024-06-07 04:58:04       27 阅读
  9. dubbo服务调用过程

    2024-06-07 04:58:04       28 阅读
  10. 数据计算的基本模式与范式

    2024-06-07 04:58:04       30 阅读
  11. matlab计算图像信噪比SNR

    2024-06-07 04:58:04       32 阅读
  12. 待定待定待定

    2024-06-07 04:58:04       35 阅读
  13. 原生js访问http获取数据的方法

    2024-06-07 04:58:04       27 阅读