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