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