当前位置: 首页 > news >正文

day21-数据结构力扣

93.复原IP地址

题目链接93. 复原 IP 地址 - 力扣(LeetCode)

思路

我还是去看题解吧,越想越晕

贴一版我最开始写的错误版本

class Solution: def restoreIpAddresses(self, s: str) -> List[str]: if not s: return [] res=[] self.backtrack(s,[],[]) return res def backtrack(self,string,path,num): if len(path)==4: res.append(path[:]) return for i in range(len(string)): num.append(string[i]) print(num) if num[0]=='0': path='.'.join(num) elif num[0]>'255': num.pop() path='.'.join(num) else: self.backtrack(string[i+1],path)

总体来说写的是四面漏风

核心规则回顾

· 分割为4 段,每段数字范围0~255

每段不能有前导 0(除非段本身就是0

字符串只能用原数字,不能增删改

正确解题思路(回溯法)

  1. 递归终止条件:分割出4 段有效数字,且字符串刚好遍历完

  2. 递归过程:

    每次截取 1~3 位字符(因为 0-255 最多 3 位)

验证截取的子串是否有效

有效则加入路径,继续递归剩余字符串

回溯:撤销当前选择,尝试下一种分割方式

提交

from typing import List class Solution: def restoreIpAddresses(self, s: str) -> List[str]: res = [] # 边界条件:ip地址总长度最小4位,最大12位 if len(s) < 4 or len(s) > 12: return res def backtrack(start: int, path: List[str]): # 终止条件:已经分割4段,且遍历完所有字符 if len(path) == 4: if start == len(s): res.append('.'.join(path)) return # 每段最多取3位数字 for i in range(start, min(start + 3, len(s))): sub = s[start:i+1] # 验证规则1:不能有前导0(长度>1且以0开头) if len(sub) > 1 and sub[0] == '0': continue # 验证规则2:数值在0-255之间 if 0 <= int(sub) <= 255: path.append(sub) backtrack(i + 1, path) path.pop() # 回溯 backtrack(0, []) return res

78.子集

题目链接78. 子集 - 力扣(LeetCode)

思路

题目要求

  1. 数组元素互不相同

  2. 返回所有可能的子集(包括空集、全集)

  3. 子集不能重复

解题思路(回溯)

  1. 每一步可以选当前元素不选

  2. 递归遍历所有位置,记录路径

  3. 每次递归都把当前路径加入结果(子集包含所有中间状态)

  4. 回溯:撤销选择,尝试下一个元素

提交

from typing import List class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: res = [] def backtrack(start: int, path: List[int]): # 核心:所有路径都是子集,直接加入结果 res.append(path.copy()) # 从start开始遍历,避免重复子集 for i in range(start, len(nums)): path.append(nums[i]) # 选择当前元素 backtrack(i + 1, path) # 递归(不能重复选自己) path.pop() # 回溯,撤销选择 backtrack(0, []) return res

原来这就是收集所有子集的代码

90.子集II

题目链接90. 子集 II - 力扣(LeetCode)

思路

感觉是多了一个去重的步骤

刚开始加了一句话,示例通过15/20

if path not in res:

然后我看到不通过示例里面有【1,4,4】,【4,1,4】这种重复类型的,用刚刚那种方法没办法去重

顺序问题,那我直接先对nums进行排序

通过

提交

class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: res = [] nums.sort() def backtrack(start: int, path: List[int]): if path not in res: res.append(path.copy()) # 从start开始遍历,避免重复子集 for i in range(start, len(nums)): path.append(nums[i]) # 选择当前元素 backtrack(i + 1, path) # 递归(不能重复选自己) path.pop() # 回溯,撤销选择 backtrack(0, []) return res
http://www.jsqmd.com/news/627520/

相关文章:

  • cv_resnet101_face-detection_cvpr22papermogface 与MySQL数据库联动:检测日志存储与分析
  • AI原生软件国际化工程实践(2024年最新Gartner验证的87%企业未采用的语义层抽象方案)
  • 零基础小白必看:Python3.11+Miniconda快速部署指南
  • 手把手教学:基于CYBER-VISION的实时路径分割系统部署指南
  • 用Glyph做视觉推理:4090D单卡快速部署,开启长文本智能处理新体验
  • 开源可部署AI工具推荐:Pixel Epic智识终端+AgentCPM-Report全解析
  • 【毕业论文求生指南】AIGC率居高不下?10款降AI工具实测清单,手把手带你安全通关
  • 实测有效!单卡10分钟微调Qwen2.5-7B,改变AI自我认知
  • Qwen3-ForcedAligner部署避坑指南:从镜像拉取到API调用完整流程
  • 技术速递|oBeaver —— 一只可以在你本地机器上运行大语言模型的海狸 [特殊字符]
  • 一丹一世界FLUX.1 Prompt工程:用InstructPix2Pix实现‘沙滩变雪地’跨域编辑
  • AI工具爱毕业aibiye针对30%重复率的论文提供智能优化方案,通过语义重组和格式调整高效降重,确保学术合规性
  • cv_unet_image-matting镜像效果展示:前后对比图看抠图质量
  • HunyuanVideo-Foley效果展示:AI音效在心理治疗白噪音定制中的应用
  • 【限时公开】某国家级AI平台服务网格拓扑图+策略规则集(脱敏版):涵盖23类AI工作负载的差异化路由策略
  • 别再为Console口抓狂!手把手教你用SecureCRT连接交换机(附USB转RJ45线选购指南)
  • FireRedASR-AED-L企业级部署架构设计:高可用与负载均衡方案
  • Go语言的sync.RWMutex源码
  • AutoGod:安卓-全兼容!一站式自动化框架,开发效率直接拉满米
  • ESP居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现拦
  • Kook Zimage真实幻想Turbo代码实例:Python调用API生成幻想人像
  • Ostrakon-VL-8B效果实测:多风格图像描述生成与可控性探索
  • 【AIOps时代压测范式革命】:为什么传统JMeter已彻底失效?——基于真实千万QPS AI工作流的6维压测指标矩阵
  • Ollama部署granite-4.0-h-350m:轻量指令模型在教育场景中的应用案例
  • Nanbeige 4.1-3B数学公式处理:LaTeX与MathType协同工作流
  • Pi0机器人控制中心入门指南:从零开始的环境配置与第一个Demo
  • 保姆级教程:用Fish Speech 1.5一键生成多语言语音,效果惊艳
  • 像素史诗·智识终端Qt桌面应用开发:打造本地化AI助手
  • 别被劣质软件坑了!25届学姐亲测10款论文降AI率红黑榜,一键速降安全线
  • 轻量级AI视觉方案:ResNet18镜像部署指南,CPU也能跑出毫秒级速度