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

yizhihongxing

这里我将给出详细的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 3.6 中从 CSV 绘制纬度经度

    【问题标题】:Plot latitude longitude from CSV in Python 3.6在 Python 3.6 中从 CSV 绘制纬度经度 【发布时间】:2023-04-03 08:31:01 【问题描述】: 我正在尝试从地图上的CSV 文件中绘制大量经纬度值,格式如下(第一列和第二列): 我正在使用 python 3.6(显然某些库,如…

    Python开发 2023年4月8日
    00
  • Python数据分析JupyterNotebook3魔法命令详解及示例

    Python数据分析JupyterNotebook3魔法命令详解及示例 Jupyter Notebook是一个非常流行的交互式计算环境,可以用于数据分析、机器学习等领域。在Jupyter Notebook中,有一些特殊的命令,称为魔法命令(Magic Command),可以帮助我们更方便地进行数据分析。本文将介绍Jupyter Notebook中的魔法命令,…

    python 2023年5月15日
    00
  • Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 什么是包? 在 Python 中,包是一种组织 Python 模块的方式。通过包,可以将一个模块文件夹下的多个 Python 模块组织为一个大的 Python 应用,方便管理与维护。一个包中必须包含一个 __init__.py 文件,该文件通常是空文件,但也可以包含一些初始化代码。 一个包可以非常复杂,可以包含子包、子模…

    python 2023年5月20日
    00
  • 使用Python制作一个数据预处理小工具(多种操作一键完成)

    下面是使用Python制作一个数据预处理小工具的完整攻略。 主要思路 该小工具的主要目的是为了在进行数据分析时,快速、方便地完成数据预处理。主要实现以下功能: 1.读取指定文件夹中的.csv数据文件; 2.对数据进行清洗,包括去除空值、去除重复值、去除异常值等; 3.对数据进行转换,包括将日期型数据转换为日期格式、将字符串格式转换为数值格式等; 4.对数据进…

    python 2023年5月13日
    00
  • Python利用Beautiful Soup模块搜索内容详解

    BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历文档树,并提供了一些有用的方法来搜索和操作文档树。以下是Python利用BeautifulSoup模块搜索内容的详细攻略: 安装BeautifulSoup 在使用BeautifulSoup之前,需要先安装BeautifulSoup。可以使用pip…

    python 2023年5月14日
    00
  • Python操作json的方法实例分析

    Python操作json的方法实例分析 在Python中,可以使用json模块来操作JSON数据。本文将详细介绍Python操作json的方法,并提供两个示例。 json模块的基本用法 json模块提供了四个主要的函数:dump()、dumps()、load()和loads()。其中,dump()和load()函数用于读写JSON文件,dumps()和loa…

    python 2023年5月15日
    00
  • python Tkinter是什么

    Python Tkinter是一个Python标准库,用于构建GUI应用程序的工具包。Tkinter提供了内置的GUI组件,如按钮、标签、文本框和滚动条,有助于创建互动和易于使用的Python应用程序。 一些Tkinter的特点如下: 可以在各种操作系统中使用,包括Windows、macOS和Linux等。 Tkinter接口具有很多功能,可以创建可扩展的G…

    python 2023年6月13日
    00
  • python掌握字符串只需这一篇就够了

    当学习Python编程语言时,掌握字符串操作是非常重要的部分。字符串在Python语言中非常常见,可以用于创建数据源、文件处理和网络传输等许多方面。 本篇文章将详细讲解如何在Python中操作字符串,包括字符串的常见方法、格式化字符串、正则表达式和字符串处理技巧。 字符串的基础 在Python中,字符串通常由一连串字符组成。可以使用单引号或双引号来定义一个字…

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