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入门教程(四十三)Python的NumPy数据类型

    Python入门教程(四十三)Python的NumPy数据类型 简介 NumPy是Python科学计算的基础库之一,实现了N维数组对象和一系列的数组操作函数。使用NumPy可以进行向量化计算,从而更加高效地处理大规模数据。本篇教程将介绍NumPy的数据类型。 数据类型 NumPy与Python内置的数据类型不同,它提供了更多支持科学计算的数据类型。常用的数据…

    python 2023年6月5日
    00
  • 解决python 找不到module的问题

    关于“解决Python找不到Module的问题”的完整攻略,可以从以下几个方面来说明: 1. 确认Module是否已安装 在Python中使用Module,首先需要在本地电脑上安装该Module。可以通过pip命令来进行安装,比如: pip install module_name 当然,也可以通过在GitHub等代码托管平台上找到对应Module的代码库,下…

    python 2023年6月3日
    00
  • python实现爬虫下载漫画示例

    以下是对“python实现爬虫下载漫画示例”攻略的详细讲解。 什么是爬虫下载漫画? 爬虫下载漫画是利用计算机程序自动化地获取网站上的多张图片,然后组合成漫画的过程。爬虫工作原理是模拟人的浏览行为,通过请求网站的URL,解析网页HTML代码,提取出图片链接并下载,最后使用python的Pillow库将多张图片合并成一张漫画。 实现步骤 获取网页源码:使用pyt…

    python 2023年5月14日
    00
  • Python3实现的回文数判断及罗马数字转整数算法示例

    下面我将对“Python3实现的回文数判断及罗马数字转整数算法示例”的完整攻略进行详细讲解。 回文数判断 算法实现思路 回文数具有对称的特点,例如121、1221等。判断一个数是否为回文数的思路是将其反转后,若与原数相等则为回文数。 因为Python中字符串可以直接进行反转,所以可以将整数转换为字符串,然后反转后比较即可。 代码实现 def isPalind…

    python 2023年6月5日
    00
  • 浅谈Python爬虫基本套路

    浅谈Python爬虫基本套路 关于爬虫 爬虫是指通过程序自动访问互联网资源,获取所需数据的一种技术手段。在信息爆炸的时代,利用自动化工具抓取大量数据并从中寻找自己需要的信息是一种非常重要的技术手段。 Python爬虫 Python可谓是轻巧、易上手的程序语言,也非常适合用于爬虫开发。它前端框架的便利性、运算速度和数据处理能力,让它成为了大家的首选。 爬虫的基…

    python 2023年5月14日
    00
  • Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)

    标题:Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率) 介绍:本文将介绍使用Python和Selenium库破解GEETEST滑块验证码的方法。通过模拟人类滑动的方式,实现95%以上的高通过率。 步骤:一、准备工作1. 安装Python3;2. 安装Selenium库和Chrome浏览器驱动;3. 安装Pillow库和Nu…

    python 2023年6月6日
    00
  • Python全栈之面向对象基础

    Python全栈之面向对象基础 Python作为一门高级语言,自然离不开面向对象编程的支持。本篇文章将为大家介绍Python面向对象编程的基础概念和应用,包括类、对象、继承、多态等内容。 面向对象基础概念 类和对象 类是抽象的概念,它定义了一类对象的共同属性和方法。而对象则是具体的实例化后的个体,每个对象都拥有其独特的属性和方法。比如我们可以用一个“Pers…

    python 2023年5月13日
    00
  • Django配合python进行requests请求的问题及解决方法

    以下是关于Django配合Python进行requests请求的问题及解决方法的攻略: Django配合Python进行requests请求的问题及解决方法 Django是一个流行的Python Web框架,可以用于开发Web应用程序。在Django中,我们可以使用Python中的requests库来发送HTTP请求和接收响应。以下是Django配合Pyth…

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