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

回溯题解——子集【LeetCode】输入的视角(选或不选)

78. 子集

✅ 一、算法逻辑讲解(逐步思路)

逻辑讲解:

  1. dfs(i):表示从下标 i 开始,做“选 or 不选”的子集构造。

  2. 终止条件 if i == n

    • 到达数组末尾,表示一种完整子集构造完成。

    • 把当前构造路径 path 复制一份加入 ans

  3. 每个位置都有两种选择:

    • 不选当前元素:直接 dfs(i+1)

    • 选当前元素:先加入 path,然后 dfs(i+1)

    • 完成后通过 path.pop() 撤销选择,回溯到上一状态。

  4. 初始从 dfs(0) 开始,表示从第一个元素开始构造子集。


⭐ 二、核心思路(算法关键点)

核心点是:使用 DFS + 回溯 来枚举所有子集

  • 每个元素有两个选择:选 or 不选。

  • 用 DFS 的递归树遍历所有选择路径。

  • 每条路径就是一个合法子集。

  • 通过 path.pop() 回溯上一步,探索下一个可能性。

这是一种更容易理解、便于剪枝的通用枚举方式,相比位运算法更直观(适合初学者理解和复杂问题扩展)。

class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:ans = []n = len(nums)path = []def dfs(i:int) -> None:if i == n:ans.append(path.copy())returndfs(i+1)path.append(nums[i])dfs(i+1)path.pop()dfs(0)return ans

⏱ 三、时间复杂度分析

时间复杂度:O(n * 2^n)

  • 一共会递归 2^n 次(每个元素选 or 不选)。

  • 每次递归最多生成一个子集,长度最多为 n,需要复制(path.copy())。

  • 所以整体复杂度为 O(n * 2^n)


💾 四、空间复杂度分析

空间复杂度:O(n) + O(n * 2^n)

  1. 递归栈空间:O(n)

    • 递归深度最大为 n,每层递归函数栈消耗是常量级。

  2. 输出空间:O(n * 2^n)

    • 一共 2^n 个子集,每个子集长度最多为 n

  3. 临时变量 pathO(n)

    • 存储当前路径,最大长度为 n

如果只考虑「辅助空间」,则是 O(n)(递归 + path)。

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

相关文章:

  • YOLOv11模型轻量化挑战:边缘计算设备部署优化方案
  • FastAPI依赖注入:构建高可维护API的核心理念与实战
  • Modbus_TCP 客户端低版本指令(归档)
  • Hadoop 分布式存储与计算框架详解
  • Web后端开发-请求响应
  • NLP:文本特征处理和回译数据增强法
  • Mac-右键用 VS Code 打开文件夹
  • 【Echarts】“折线+柱状”实现双图表-家庭用电量可视化【文章附完整代码】
  • 泛微虚拟视图-数据虚拟化集成
  • 从库函数到API接口,深挖不同语言背后的“封装”与“调用”思想
  • pytest通过pytest_runtest_makereport添加失败截图到Allure报告中
  • 常见问题与最佳实践——AI教你学Docker
  • 1-Kafka介绍及常见应用场景
  • 学习基于springboot秒杀系统-环境配置(接口封装,mybatis,mysql,redis(Linux))
  • 2025年全国青少年信息素养大赛图形化(Scratch)编程小学低年级组初赛样题答案+解析
  • 登山第二十六梯:单目3D检测一切——一只眼看世界
  • 【C++开源库使用】使用libcurl开源库发送url请求(http请求)去下载用户头像文件(附完整源码)
  • 【R语言】 在读取 CSV 或 Excel 文件时的标准输出
  • 自定义简单线性回归模型
  • 【AI大模型】神经网络反向传播:核心原理与完整实现
  • 电脑电压过高的影响与风险分析
  • 轨迹优化 | 基于激光雷达的欧氏距离场ESDF地图构建(附ROS C++仿真)
  • 回溯题解——子集【LeetCode】二进制枚举法
  • ssh: Could not resolve hostname d: Temporary failure in name resolution
  • 从依赖地狱到依赖天堂PNPM
  • 01、通过内网穿透工具把家中闲置电脑变成在线服务器
  • C盘瘦身 -- 虚拟内存文件 pagefile.sys
  • (六)PS识别:源数据分析- 挖掘图像的 “元语言”技术实现
  • python list去重
  • 【Behavior Tree】-- 行为树AI逻辑实现- Unity 游戏引擎实现