题目描述

给你一个整数数组 nums,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1: 输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2: 输入:nums = [0]
输出:[[],[0]]

思路&js代码

1、迭代法实现子集枚举

var subsets = function(nums) {
    const ans = [];
    const n = nums.length;
    for (let mask = 0; mask < (1 << n); ++mask) {
        const t = [];
        for (let i = 0; i < n; ++i) {
            if (mask & (1 << i)) {
                t.push(nums[i]);
            }
        }
        ans.push(t);
    }
    return ans;
};

2、递归法实现子集枚举

var subsets = function (nums) {
  const t = []
  const ans = []
  const dfs = cur => {
    if (cur === nums.length) {
      // 记录答案
      ans.push(t.slice())
      return
    }
    // 选择当前位置
    t.push(nums[cur])
    dfs(cur + 1)
    t.pop(t.length - 1)
 
    // 不选择当前位置
    dfs(cur + 1)
  }
 
  dfs(0)
  return ans
}