代码随想录Day23 | Leetcode93 复原 IP 地址、Leetcode78 子集 | Leetcode90 子集II

上题

93. 复原 IP 地址 - 力扣(LeetCode)

78. 子集 - 力扣(LeetCode)

90. 子集 II - 力扣(LeetCode)

第一题

有效 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"]

思路

  • 老一套的回溯,用res记录结果,当len(res) == 4且i恰好等于字符串长度len(s)时,就是满足条件的一个IP
  • 每个IP的整数位在[0,255]之间且不能含有前导0,但是可以是单个0,所以可以得到判断条件:
    • s[i:j+1] <= 255
    • s[i] != 0 或者 i == j,i==j时不管是不是0都能直接取,如果是前导0后续的循环仍会判断首位是否是0

代码

class Solutio:"""有效 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"]"""def restoreIpAddresses(self, s):result = []res = []n = len(s)def dfs(i):d = len(res)if i == n and d == 4:# print(res)re = '.'.join(res)result.append(re)returnif d > 4:returnfor j in range(i, min(i + 3, n)):if int(s[i:j + 1]) < 256 and (s[i] != '0' or i == j):res.append(s[i:j + 1])dfs(j + 1)res.pop()dfs(0)return resultif __name__ == '__main__':test = Solutio()s = ['25525511135', '0000', '101023', '025514255']for i in s:print(test.restoreIpAddresses(i))

第二题

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的
子集
(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:
输入:nums = [0]
输出:[[],[0]]

思路

全列举并且包含空集,那在每次进入递归函数时添加一次结果即可

代码

class Solution:"""给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]"""def subsets(self, nums):result = []res = []n = len(nums)def dfs(i):result.append(res.copy())if i == n:returnfor j in range(i, n):res.append(nums[j])dfs(j+1)res.pop()dfs(0)return resultif __name__ == '__main__':test = Solution()nums = [[1, 2, 3], [0]]for i in nums:print(test.subsets(i))

第三题

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例 1:
输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2:
输入:nums = [0]
输出:[[],[0]]

思路

可能有相同的元素,只需要对列表排序然判断当前元素是否与上个元素相同,相同则跳过

代码

class Solution:"""给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例 1:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2:输入:nums = [0]输出:[[],[0]]"""def subsetsWithDup(self, nums):result = []res = []n = len(nums)def dfs(i):result.append(res.copy())if i == n:returnfor j in range(i, n):if j > i and nums[j] == nums[j - 1]:continueres.append(nums[j])dfs(j + 1)res.pop()nums.sort()dfs(0)return resultif __name__ == '__main__':test = Solution()nums = [[1, 2, 2], [0]]for i in nums:print(test.subsetsWithDup(i))

总结

回溯的套路已经深记脑子。。。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux每日练习

第一部分 1.打开桌面的主文件夹&#xff0c;在图片文件夹下新建一个名为111的文件夹&#xff0c;在视频文件夹下创建一个名为222的文件夹 [rootxcz7 desk]# mkdir -p ./pic/111 [rootxcz7 desk]# mkdir -p ./video/2222.在桌面打开终端&#xff0c;先切换到根目录下&#xff…

NineData与OceanBase完成产品兼容认证,共筑企业级数据库新生态

近日&#xff0c;云原生智能数据管理平台 NineData 和北京奥星贝斯科技有限公司的 OceanBase 数据库完成产品兼容互认证。经过严格的联合测试&#xff0c;双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。 此次 NineData 与 OceanBase 完成产品兼容认证&#xf…

【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 传统布局和Web标准布局的区别

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 传统布局与…

【机器学习】包裹式特征选择之基于遗传算法的特征选择

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

微信小程序开发系列(二十二)·wxml语法·双向数据绑定model:的用法

目录 1. 单向数据绑定 2. 双向数据绑定 3. 代码 在 WXML 中&#xff0c;普通属性的绑定是单向的&#xff0c;例如&#xff1a;<input value"((value))"/> 如果希望用户输入数据的同时改变 data 中的数据&#xff0c;可以借助简易双向绑定机制。在对应属性…

STM32day2

1.思维导图 个人暂时的学后感&#xff0c;不一定对&#xff0c;没什么东西&#xff0c;为做项目奔波中。。。1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_val HAL_ADC_GetValue(&a…

hive 数据库用户权限授权

CREATE ROLE cz20240304; GRANT cz20240304_role TO USER cz20240304; grant select on table secured_t to role cz20240304_role;hive用户角色授权官网超链接

开源分子对接程序rDock使用方法(1)-Docking in 3 steps

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Docking in 3 steps 标准对接rDock 的基本对接步骤及注意事项 二、 三步对接案例Step 1. 结构文件准备Step 2. 产生对接位点Step 3. 运行分子对接3.1 检查输入文件3.2 测试-只进行打分3.3 运行…

【数据结构】二、线性表:6.顺序表和链表的对比不同(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))

文章目录 6.对比&#xff1a;顺序表&链表6.1逻辑结构6.2物理结构&#xff08;存储结构&#xff09;6.2.1顺序表6.2.2链表 6.3数据运算&#xff08;基本操作&#xff09;6.3.1初始化6.3.2销毁表6.3.3插入、删除6.3.4查找 6.对比&#xff1a;顺序表&链表 6.1逻辑结构 顺…

【短时交通流量预测】基于小波神经网络WNN

课题名称&#xff1a;基于小波神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&#x…

【Web】浅聊Java反序列化之Spring2链——两层动态代理

目录 简介 简话JdkDynamicAopProxy 关于target的出身——AdvisedSupport EXP 请确保已阅读过前文或对Spring1链至少有一定认知&#xff1a;【Web】浅聊Java反序列化之Spring1链——三层动态代理-CSDN博客 简介 Spring2 和 Spring1 的反序列化过程基本相同&#xff0c;唯一…

【嵌入式】嵌入式系统稳定性建设:静态代码扫描的稳定性提升术

1. 概述 在嵌入式系统开发过程中&#xff0c;代码的稳定性和可靠性至关重要。静态代码扫描工具作为一种自动化的代码质量检查手段&#xff0c;能够帮助开发者在编译前发现潜在的缺陷和错误&#xff0c;从而增强系统的稳定性。本文将介绍如何在嵌入式C/C开发中使用静态代码扫描…

c#空闲中断接收

C# 28.实现串口空闲中断接收功能_c# serialport空闲中断-CSDN博客

Spring Boot 整合 Redis 实现排行榜功能

在Spring Boot中整合Redis实现排行榜功能,你首先需要在项目中添加Redis的依赖,并配置好Redis连接信息。然后,你可以使用Spring Data Redis提供的模板类来操作Redis的有序集合(Sorted Set),从而实现排行榜功能。 以下是使用Spring Boot整合Redis实现排行榜功能的基本步骤:…

Spring Boot启动流程详解

Spring Boot是一个基于Spring框架的快速开发工具&#xff0c;它可以帮助我们快速搭建一个可运行的Spring应用。本文将详细介绍Spring Boot的启动流程&#xff0c;帮助大家更好地理解Spring Boot的工作原理。 一、Spring Boot启动流程概述 Spring Boot的启动流程可以分为以下几…

排序算法——梳理总结

✨冒泡 ✨选择 ✨插入  ✨标准写法  &#x1f3ad;不同写法 ✨希尔排序——标准写法 ✨快排 ✨归并 ✨堆排 ✨冒泡 void Bubble(vector<int>& nums) {// 冒泡排序只能先确定最右边的结果&#xff0c;不能先确定最左边的结果for (int i 0; i < nums.size(); i){…

基于深度学习的交通标志检测识别系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

linux系统命令深入研究1——ls的参数

ls list命令有一些常用的参数&#xff0c;其中-a意为列出all全部文件&#xff08;包括隐藏文件&#xff09;&#xff0c;-l列出详细信息&#xff0c;-h以人类可阅读的方式列出文件大小 --full-time是列出详细时间信息&#xff0c;包括最后一次修改时间 -t是按时间排序&#xff…

课时57:数组实践_综合实践_数组案例

1.2.2 数组案例 学习目标 这一节&#xff0c;我们从 信息统计、服务管理、小结 三个方面来学习。 信息统计 需求 分别打印CPU 1min 5min 15min load负载值 命令提示&#xff1a;uptime信息显示&#xff1a;CPU 1 min平均负载为: 0.00CPU 5 min平均负载为: 0.01CPU 15 min平…

Git 内幕探索:从底层文件系统到历史编辑的全面指南

微信搜索“好朋友乐平”关注公众号。 1. Git 底层文件对象 #mermaid-svg-uTkvyr26fNmajZ3n {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uTkvyr26fNmajZ3n .error-icon{fill:#552222;}#mermaid-svg-uTkvyr26fNmaj…