当前位置: 首页 > 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.lryc.cn/news/582358.html

相关文章:

  • 机器学习知识
  • 独立开发A/B测试实用教程
  • Docker 稳定运行与存储优化全攻略(含可视化指南)
  • LeetCode 151. 反转字符串中的单词
  • TCP长连接保持在线状态
  • 人工智能-基础篇-23-智能体Agent到底是什么?怎么理解?(智能体=看+想+做)
  • 数据中台架构解析:湖仓一体的实战设计
  • 计算阶梯电费
  • C盘瘦身 -- 虚拟内存文件 pagefile.sys
  • Go defer(二):从汇编的角度理解延迟调用的实现
  • MIL-STD-1553B总线
  • NLP自然语言处理 02 RNN及其变体
  • 【Java面试】Https和Http的区别?以及分别的原理是什么?
  • 【应急响应】Linux 自用应急响应工具(LinuxCheckShoot)
  • 【力扣(LeetCode)】数据挖掘面试题0003: 356. 直线镜像
  • 明星AI自动化测试工具Midscene.js源码解析
  • Vidwall: 支持将 4K 视频设置为动态桌面壁纸,兼容 MP4 和 MOV 格式
  • 【保姆级图文详解】探秘 Prompt 工程:AI 交互的关键密码
  • 【Netty基础】Java原生网络编程
  • 熔断限流降级
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的高校实验室资源综合管理系统,推荐!
  • Spring @Conditional注解深度解析:从原理到最佳实践
  • 10.6 ChatGLM3私有数据微调实战:24小时打造高精度模型,显存直降60%
  • 【机器学习笔记 Ⅲ】4 特征选择
  • 【ARM AMBA AXI 入门 21 -- AXI partial 访问和 narrow 访问的区别】
  • 田间杂草分割实例
  • Qt的第一个程序(2)
  • JVM基础01(从入门到八股-黑马篇)
  • 微信小程序81~90
  • C++笔记之和的区别