🧩Algo 回溯

78. 子集

难度:🟡 Medium | 标签:回溯、位运算 | 状态:⬜ LeetCode 链接

思路

每个元素:选 或 不选。 回溯框架:递归到 i == n 时把当前 path 加入结果。

代码

class Solution {
    vector<vector<int>> res;
    vector<int> path;
    void dfs(vector<int>& nums, int i) {
        if (i == (int)nums.size()) { res.push_back(path); return; }
        // 不选
        dfs(nums, i + 1);
        // 选
        path.push_back(nums[i]);
        dfs(nums, i + 1);
        path.pop_back();
    }
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums, 0);
        return res;
    }
};

复杂度

  • 时间 O(n · 2ⁿ),空间 O(n)

易错 / 回顾

  • 也可用 start 模式:每层尝试加 i ∈ [start, n),每加一个就 push 当前
  • 位运算法:i ∈ [0, 2ⁿ),每位代表选不选
  • 含重复(90):排序 + 同层去重
Related · 回溯