Hot100:子集(Subsets)回溯枚举 / startIndex 模板 ACERS 解析

副标题 / 摘要 子集是 Hot100 回溯专题里最适合打地基的一题。真正要固定下来的不是“把答案都列出来”,而是 path、startIndex 和“每个节点都是答案”这三个核心不变式。 预计阅读时长:10~12 分钟 标签:Hot100、回溯、子集、DFS SEO 关键词:Subsets, 子集, 回溯, startIndex, 幂集 元描述:用 LeetCode 78 子集建立最稳定的回溯模板,含工程场景、复杂度分析与多语言实现。 目标读者 刚进入 Hot100 回溯专题、想先把模板打稳的学习者 能写 DFS,但还没真正理解“组合”和“排列”区别的开发者 希望把枚举思路迁移到配置组合、策略试跑场景的工程师 背景 / 动机 “列出所有可能组合”在工程里并不少见。 比如功能开关组合试跑、权限策略候选集生成、前端筛选项预设等,本质上都在做“从若干候选元素里列出所有选择结果”。 这类问题最容易犯的错有两个: 把组合写成排列,导致重复答案 把“什么时候收集答案”放错位置,导致漏解 LeetCode 78 的价值就在于:它约束足够简单,没有重复元素,也不要求复杂剪枝,适合你先把回溯树的骨架搭稳。 核心概念 path:当前递归路径上已经选中的元素 startIndex:下一层从哪里开始选,保证组合不会倒序重复 前序收集答案:子集题里,每个节点本身就是一个合法答案 回溯撤销:递归返回后,要把刚加入 path 的元素弹出 A — Algorithm(题目与算法) 题目还原 给定一个元素互不相同的整数数组 nums,返回它的所有可能子集。 结果中不能包含重复子集,返回顺序不限。 输入输出 名称 类型 描述 nums int[] 元素互不相同的整数数组 返回 int[][] 所有可能的子集 示例 1 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2 输入:nums = [0] 输出:[[],[0]] 提示 1 <= nums.length <= 10 -10 <= nums[i] <= 10 nums 中所有元素互不相同 C — Concepts(核心思想) 为什么它是回溯入门题 这题没有“目标和”、没有“判重数组”、也没有棋盘边界。 你只需要想清楚一件事: ...

2026年4月2日 · 5 分钟 · map[name:Jeanphilo]