python 输入字符串生成所有有效的IP地址(LeetCode 93号题)

这里我将给出详细的Python代码和解析来实现LeetCode 93号题,即输入一个字符串生成所有有效的IP地址。

问题描述

给定一个只包含数字的字符串"25525511135",将它转换成所有可能的IP地址返回。有效的IP地址由四个0到255之间的整数表示,并且以“点”隔开。例如,字符串"25525511135"可以转换为如下所有有效的IP地址:

[
  "255.255.11.135",
  "255.255.111.35"
]

解题思路

这道题是一道比较典型的DFS深度优先搜索题,我们可以把给定的字符串划分成四个部分,分别表示ip地址中的四个整数。然后对于每一个整数,枚举它可能的取值,直到形成一个完整的ip地址。

具体来说,我们可以在dfs递归函数中维护一个变量k,它表示我们已经凑出了ip地址中的前k个整数。同时,为了避免出现像“012”这样的不合法ip地址,我们还需要一个变量last,它表示在向第k+1个整数尝试添加数字时,在原字符串中的起始位置。

代码如下:

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

    def dfs(self, s, k, path, res):
        if k == 4:  # 找到了四个整数,添加到结果中
            if not s:  # 如果原字符串也用完了,就添加
                res.append('.'.join(path))
            return

        for i in range(1, 4):
            # 尝试添加新的整数
            if i <= len(s):
                # 新的整数不能以0开头,除非它本身就是0
                if i == 1 or (i > 1 and s[0] != '0'):
                    # 新的整数必须在[0, 255]范围内
                    if int(s[:i]) <= 255:
                        # 将新整数添加到路径中,并递归查找下一个整数
                        self.dfs(s[i:], k + 1, path + [s[:i]], res)

这个代码中,我们定义了一个抽象数据结构path,它表示生成的ip地址,然后每个递归分支会尝试添加ip地址的下一个整数。

注意,由于每个整数只可能由1、2、或3个数字组成,所以我们在进行枚举时,只需枚举长度在[1,3]之间的所有子串即可。

示例说明

接下来我们对两个示例进行说明。

示例1

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

当s="25525511135"时,修正上述代码中的函数,进行DFS调用,生成合法的IP即可,代码如下:

s = Solution()
s.restoreIpAddresses("25525511135")
# Out: ["255.255.111.35", "255.255.11.135"]

示例2

Input: s = "0000"
Output: ["0.0.0.0"]

当s="0000"时,修正上述代码中的函数,进行DFS调用,生成合法的IP即可,代码如下:

s = Solution()
s.restoreIpAddresses("0000")
# Out: ["0.0.0.0"]

希望这些说明可以帮助您理解并解决这道难度为中等的LeetCode 93号题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 输入字符串生成所有有效的IP地址(LeetCode 93号题) - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • 线程和进程的区别及Python代码实例

    线程和进程是计算机操作系统中的两个基本概念,它们都是实现多任务的方法,但在具体使用中有着不同的特点和适用场景。 线程和进程的区别 定义 进程是指在计算机中运行的一段程序,可以理解为一个程序的实例;线程是进程中的一个执行单元,是 CPU 调度和分派的基本单位。 内存分配 进程有独立的内存空间,进程之间相互隔离,一个进程的内存不会被其他进程访问。 线程共享所属进…

    python 2023年6月6日
    00
  • Python BST 搜索 – TypeError

    【问题标题】:Python BST search – TypeErrorPython BST 搜索 – TypeError 【发布时间】:2023-04-04 11:24:01 【问题描述】: 我有以下二叉搜索树节点类: class Node: # Implement a node of the binary search tree. # Construct…

    Python开发 2023年4月6日
    00
  • Python 实现网页自动截图的示例讲解

    Python 实现网页自动截图需要使用第三方库,比较流行的是 Selenium 和 Pyppeteer。这里以 Selenium 为例,讲解实现网页自动截图的攻略。 准备工作 首先需要安装 Selenium,可以通过 pip 命令进行安装: pip install selenium 接着需要安装浏览器驱动,例如 Chrome 驱动。可以到 ChromeDri…

    python 2023年6月6日
    00
  • Python:使用for循环插入数据而没有超时错误

    【问题标题】:Python: Insert data with for loop without timeout errorPython:使用for循环插入数据而没有超时错误 【发布时间】:2023-04-05 03:34:01 【问题描述】: 我需要按年份批量插入数据,但我得到了 %Server% ping 错误:超时。连接已关闭,重新连接。 而且我不知道…

    Python开发 2023年4月6日
    00
  • 在 Python 中使用条件元组对数据进行子集化

    【问题标题】:Subset data using a tuple of conditions in Python在 Python 中使用条件元组对数据进行子集化 【发布时间】:2023-04-04 14:08:01 【问题描述】: 我有一个输入数据框和一个元组列表。使用我将用来过滤数据框的元组列表。元组的结构如下: [(column_name1, min_v…

    Python开发 2023年4月6日
    00
  • python语言的优势是什么

    以下是“Python语言的优势是什么”的完整攻略: 一、问题描述 Python是一种高级编程语言,具有简单易学、可读性强、功能强大等优点。本文将详细讲解Python语言的优势是什么。 二、解决方案 2.1 Python语言的优势 Python语言具有以下优势: 简单易学:Python语言的语法简单明了,易于学习和使用。Python语言的代码可读性强,代码结构…

    python 2023年5月14日
    00
  • python发送HTTP请求的方法小结

    下面我详细讲解一下“python发送HTTP请求的方法小结”的完整攻略。 1. 简介 Python是一种非常流行的编程语言,其可以使用一个HTTP库来发送HTTP请求并接收HTTP响应。常见的HTTP库有Python内置的urllib模块和第三方库requests。这两个库的用法有所不同,但都能满足普通的发送HTTP请求的需求。 2. 使用urllib发送H…

    python 2023年6月3日
    00
  • python 获取utc时间转化为本地时间的方法

    获取 UTC 时间并转换成本地时间是 Python 中经常需要的操作,可以使用 datetime 模块中的方法来实现。 首先需要导入相关的模块: import datetime import pytz # 需要安装 pytz。 接下来,获取当前 UTC 时间,可以使用 datetime.datetime.utcnow() 方法: utc_time = dat…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部