代码随想录算法训练营第28天(py)| 回溯 | 93.复原IP地址、78.子集、90.子集II

93.复原IP地址

力扣链接
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的IP地址不能含有前导0,共有4个字段,且每个字段不能超过255

思路

在这里插入图片描述

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

    def backtracking(self, s, startIndex, pointNum, cur, res):
        if pointNum == 3: # 句点数量3个时,分割结束
            if self.isLeagal(s, startIndex, len(s)-1):
                cur += s[startIndex:]
                res.append(cur)
            return
        
        for i in range(startIndex, len(s)):
            if self.isLeagal(s ,startIndex, i):
                sub = s[startIndex : i+1]
                self.backtracking(s, i+1, pointNum + 1, cur + sub + '.', res)
            else:
                break

    def isLeagal(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

78.子集

力扣链接
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集,包括空集。

思路

如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点
在这里插入图片描述

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res = []
        path = []
        self.backtracking(nums, 0, path, res)
        return res
    
    def backtracking(self, nums, startIndex, path, res):
        res.append(path[:])
        for i in range(startIndex, len(nums)):
            path.append(nums[i])
            self.backtracking(nums, i+1, path, res)
            path.pop()

90.子集II

力扣链接
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

思路

在这里插入图片描述

class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        res = []
        path = []
        used = [False] * len(nums)
        nums.sort()
        self.backtracking(nums, 0, used, path, res)
        return res
    def backtracking(self, nums, startIndex, used, path, res):
        res.append(path[:])
        for i in range(startIndex, len(nums)):
            # used[i - 1] == True,说明同一树枝 nums[i - 1] 使用过
            # used[i - 1] == False,说明同一树层 nums[i - 1] 使用过
            # 而我们要对同一树层使用过的元素进行跳过
            if i > 0 and nums[i] == nums[i-1] and not used[i-1]:
                continue
            path.append(nums[i])
            used[i] = True
            self.backtracking(nums, i+1, used, path, res)
            used[i] = False
            path.pop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/678686.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

异或炸弹(easy)(牛客小白月赛95)

题目链接: D-异或炸弹(easy)_牛客小白月赛95 (nowcoder.com) 题目: 题目分析: 一看 还以为是二维差分的题呢 到后来才发现是一维差分问题 这里的距离是 曼哈顿距离 dis abs(x - xi) abs(y - yi) 暴力的做法 就是枚举 n * n 个…

NFC隐藏功能大公开:乘车刷门禁,NFC实用无风险

手机到底集成了多少功能?如今恐怕已经没有人能数的清了。但是你又用到了多少呢?有些功能是不是就从来没打开过呢?花了全款却只用功能的百分之一,是不是感觉很不划算呢? 费流量、占内存、费电通常是用户浪费手机功能的…

SG7050CCN CMOS输出石英晶体振荡器适用于防盗防灾装置

爱普生晶振SG7050CCN是一款额定频率范围2.5MHz至50MHz的石英晶体振荡器(SPXO),支持CMOS输出,具有小尺寸7.0x5.0mm四脚贴片晶振,体积小巧,高稳定性,其中爱普生的一款额定频率16.000MHz,/-50ppm晶振,7050封装常规有源晶振…

大量单号中如何分析出异常单号

什么情况下单号算异常单号呢,首先根据单号物流信息过程轨迹判断哦,比如某个单号已显示快递公司已揽收了,超过24或36、48甚至更长时间也没有看到走件信息哦,一般这类单号也叫揽收后无走信息,这类单号就只能一条揽收信息…

【智能体】文心智能体大赛第二季持续进行中,一起在智能体的海洋里发挥你的创意吧

目录 背景作文小助手AI迅哥问答程序员黄历助手比赛时间第二期赛题丰厚奖品评选说明获奖智能体推荐文章 背景 AI应用(智能体),持续火热,一句话就能创建一个有趣、好玩的应用。 可以说一分钟内就能创建一个有创意的智能体。 看大多…

【第十课】空间数据基础与处理——空间范围处理

一、前言 在利用Arcgis分析中通常会研究我国局部地区的发展,如长江中游城市群、 某个省、长江经济带等,在对这类区域进行可视化时,经常会需要一幅局部地图,通常这种局部地图是很难直接获取的,需要通过一定的方法进行处…

2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024)

2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024) 2024 International Academic Conference on Cloud Computing, Signal Processing, and Network Technology(ICCCSPNT 2024) 会议简介: 2024年云计算、…

cesium Material的理解与使用

1.简介 材质Material可以是比较简单的,比如直接将一张图片赋予表面,或者使用条纹状、棋盘状的图案;也可以使用Fabric和GLSL,重新创建一个新的材质或者组合现有的材质。例如,我们可以通过程序生成的纹理(procedural bri…

【leetcode--盛水最多的容器】

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 写出来了一半,想到用双指针&am…

高精度滚珠丝杆在自动化生产中的关键因素!

如今,自动化技术正以前所未有的速度改变着人们的生活和工作方式,特别是在高精度精密设备的制造与应用领域,提高生产效率和优化生产流程正变得越来越重要。在自动化生产中,滚珠丝杆的优化应用对于提高生产效率、保证产品质量至关重…

【OCPP】ocpp1.6协议第4.3章节DataTransfer的介绍及翻译

目录 4.3、DataTransfer-概述 DataTransfer 消息 数据传输请求(DataTransfer Request) 数据传输响应(DataTransfer Response) 使用场景 示例 DataTransfer 请求示例 处理 DataTransfer 响应 示例代码 可能的错误处理 总…

Java1.8语言+ springboot +mysql + Thymeleaf 全套家政上门服务平台app小程序源码

Java1.8语言 springboot mysql Thymeleaf 全套家政上门服务平台app小程序源码 家政系统是一套可以提供上门家政、上门维修、上门洗车、上门搬家等服务为一体的家政平台解决方案。它能够与微信对接、拥有用户端小程序,并提供师傅端app,可以帮助创业者在…

AutoCutVideo自动剪辑软件

随着视频内容创作的普及,找到一款既高效又便捷的视频剪辑工具成为了创作者的迫切需求。在众多选择中,AutoCutVideo以其杰出的功能脱颖而出,提供了一个无与伦比的视频编辑解决方案。这款软件不仅能够支持多样化的视频格式导入,其直…

C#上位机开发

目录 一、上位机简介二、C#语法三、新建VS工程四、WinForm控件4.1 属性4.2 事件4.3 窗体方法4.4 常用控件4.5 布局 五、Serial上位机六、项目打包成安装包6.1 前提准备6.2 打包步骤 一、上位机简介 在单片机项目开发中,上位机也是一个很重要的部分,主要用…

【游戏】Goc赚钱模拟器

Hello!大家好,我是学霸小羊,今天分享一个Goc游戏。 //注:以下代码为Goc原创代码。 大家可以在下面网址写入代码www.51goc.com慧通教育http://www.51goc.com注:Goc编辑器路径: www.51goc.com ➡ 登录 ➡ 游客登陆 ➡…

⌈ 传知代码 ⌋ 微表情识别系统

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

什么是室内外一体化定位

室内外一体化定位是一种技术,它允许在室内外环境中对设备或人员进行连续、无缝的定位跟踪。这种技术结合了多种定位技术的优势,以克服单一技术在室内外环境中可能遇到的局限性。 室内外一体化定位通常涉及以下几种技术: 1. 卫星定位系统&am…

Qt 【Object::connect: No such slot 。。。】解决方法

发生如下所示问题,有三种原因造成: 1.下图中的Q_OBJECT被注释掉或者漏了(该问题不常见) 2.下图中声明slots漏了(新手较常见) 3.发生下面两行中的错误,在下面两行代码中仅仅是一个参数名字的区别…

【Android Studio】导入import android.support.v7.app.AppcompatActivity;时报错

一、问题描述 在进行安卓项目开发时使用import android.support.v7.app.AppcompatActivity;报错: 运行后会有乱码出现: 二、解决办法 将import android.support.v7.app.AppcompatActivity;改为import androidx.appcompat.app.AppCompatActivity;基本上…

微信小游戏开发的相关工具

游戏引擎:Cocos Creator 推荐cocos creator,2d游戏引擎对微信小游戏支持比较好 传送门:Cocos - The worlds top 2D&3D engine, game / smart cockpit /AR/VR/ virtual character / education UI制作:FairyGUI 非常好用的UI…