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

相关文章:

  • uniapp运行项目到ios基座
  • 【图像与信号处理】基于可微分二值化网络(DBNet)与循环卷积神经网络(CRNN)的电梯铭牌和限速器检验单识别方法
  • 6,Receiving Messages:@KafkaListener Annotation
  • mac中有多个java版本涉及到brew安装中,怎么切换不同版本
  • Baklib作为赞助商参加RubyConf China 2025 技术大会
  • 宝塔下载pgsql适配spring ai
  • Qt中的坐标系
  • 如果让计算机理解人类语言- Word2Vec(Word to Vector,2013)
  • 1.1_5_2 计算机网络的性能指标(下)
  • 腾讯云录音文件快速识别实战教程
  • Oracle PL/SQL 编程基础详解(从块结构到游标操作)
  • vue3 字符包含
  • C++标准库中各种互斥锁的用法 mutex
  • WebRTC与RTMP
  • AtCoder AT_abc413_d [ABC413D] Make Geometric Sequence
  • 【Godot4】正则表达式总结与测试
  • 操作系统【2】【内存管理】【虚拟内存】【参考小林code】
  • 使用Scapy构造OSPF交互报文欺骗网络设备与主机建立Full关系
  • 20250706-12-Docker快速入门(下)-容器数据持久化_笔记
  • Redis集群和 zookeeper 实现分布式锁的优势和劣势
  • 桥梁桥拱巡检机器人cad+【4张】设计说明书+绛重+三维图
  • React 英语单词消消乐一款专为英语学习设计的互动式记忆游戏
  • 20250706-11-Docker快速入门(下)-构建Nginx镜像和Tomcat镜像_笔记
  • DTW模版匹配:弹性对齐的时间序列相似度度量算法
  • 计算机网络实验——互联网安全实验
  • 【C++】C++四种类型转换操作符详解
  • 如何使用xmind编写测试用例
  • Docker容器中安装MongoDB,导入数据
  • electron中的IPC通信
  • WebRTC 的 ICE candidate 协商