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

hot100 -- 10.回溯系列

1.全排列

问题:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

方法:回溯法(固定当前位置,处理后续元素)

# 全排列:回溯法(固定每个位置,并处理剩余元素,以遍历所有可能)
# 初始:[1,2,3]
#    1固定 → 处理[2,3] → 得到[1,2,3]和[1,3,2]
#    2固定 → 处理[1,3] → 得到[2,1,3]和[2,3,1]
#    3固定 → 处理[1,2] → 得到[3,1,2]和[3,2,1]def permute(nums):res = []def backtrack(first):# 筛完一轮if first == len(nums):res.append(nums.copy())                         # 拷贝,防止res跟着nums变return# 固定first及以前的,处理后续的所有可能for i in range(first, len(nums)):nums[first], nums[i] = nums[i], nums[first]     # 交换backtrack(first+1)                              # 处理后续元素nums[first], nums[i] = nums[i], nums[first]     # 回溯(换回来)backtrack(0)return resprint(permute([1,2,3]))

2.子集

问题:

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

方法1:回溯法

# 方法1:回溯法
def subsets(nums):res = [[]]          # 保存最终结果path = []           # 包含子集def backtrack(first, path):for i in range(first, len(nums)):path.append(nums[i])                # 记录当前子集res.append(path.copy())             # 将当前子集添加进结果backtrack(i+1, path)                # 尝试后面的可能path.pop()                          # 回溯backtrack(0, [])return res

方法2:迭代法

# 方法2:迭代法(保存之前元素,逐步扩展后续元素)
def subsets(nums):res = [[]]for num in nums:res += [subset + [num] for subset in res]return res

http://www.dtcms.com/a/238476.html

相关文章:

  • 电流舵DAC设计(二)
  • Vue-Leaflet地图组件开发(三)地图控件与高级样式设计
  • Python学习——排序
  • Java严格模式withResolverStyle解析日期错误及解决方案
  • AI架构师修炼之道
  • 深入解析Java21核心新特性(虚拟线程,分代 ZGC,记录模式模式匹配增强)
  • 指针的使用——字符、字符串、字符串数组(char*)
  • Cesium快速入门到精通系列教程八:时间系统
  • Razor编程RenderXXX相关方法大全
  • ChatterBox - 轻巧快速的语音克隆与文本转语音模型,支持情感控制 支持50系显卡 一键整合包下载
  • Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
  • 异步跟栈 webpack
  • 【Elasticsearch】映射:fielddata 详解
  • Linux云原生架构:从内核到分布式系统的进化之路
  • 深入解析 Qwen3-Embedding 的模型融合技术:球面线性插值(Slerp)的应用
  • 信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
  • 第1课、LangChain 介绍
  • 风控系统中常用的概念和架构学习
  • uni-app学习笔记三十三--触底加载更多和下拉刷新的实现
  • Linux性能调优:从内核到应用的极致优化
  • <3>-MySQL表的操作
  • unity ngui button按钮点击时部分区域响应,部分区域不响应
  • unity实现自定义粒子系统
  • 【无人机】地面站crazyfile-cfclient免安装方法,Python3.10的整体环境配置打包
  • 支付系统架构图
  • 【设计模式】1.简单工厂、工厂、抽象工厂模式
  • jmeter聚合报告中参数详解
  • 重新定义 AI 协同:三款开源 MCP 工具开启智能体从“聊天”到“操控”
  • Bootstrap Table开源的企业级数据表格集成
  • LLMs 系列科普文(12)