# 【Day 34】子集

# 题目描述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 我的回答

https://github.com/leetcode-pp/91alg-1/issues/60#issuecomment-655407265

# 解法一

# 时间复杂度 O(2^n)

# 空间复杂度 O(n)

var subsets = function(nums) {
    let res = [[]];
    for(let i = 0;i < nums.length;i++){
        let len = res.length;
        for(let j = 0;j < len;j++){
            let sub = res[j].slice();
            sub.push(nums[i]);
            res.push(sub);
        }
    }
    return res;
};

# 解法二

function subsets(nums) {
    const res = []
    const dfs = (nums, cur, sub) => {
        if (cur === nums.length) {
            res.push(sub)
            return
        }
        // exclude the current element
        dfs(nums, cur + 1, sub)
        // include the current element
        dfs(nums, cur + 1, [...sub, nums[cur]])
    }
    dfs(nums, 0, [])
    return res
};

# 参考回答

Last Updated: 12/22/2022, 9:53:26 AM