# 【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
};