# 子集(78)
# 题目
给你一个整数数组 nums ,数组中的元素 互不相同
。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
# 示例
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
输入:nums = [0]
输出:[[],[0]]
# 提示
- 1 <= nums.length <= 10
- -10 <= nums[i] <= 10
- nums 中的所有元素 互不相同
# 算法
# 迭代枚举
- 使用变量
res
保存结果,初始化为[[]]
- 我们依次取出参数
nums
中的数字num
- 将
num
分别插入res
已经存在的元素中,将新产生的元素组合放在数组temp
中 - 将
temp
推入res
,置空res
,并从第二步开始重复
因为nums
中元素不重复,所以如此产生的新元素也不重复
上述过程以[1, 2, 3]
为例:
res
初始化为[[]]
num
为1
,分别与res
中元素产生新元素[1]
,组合后新的res
为[[], [1]]
num
为2
,分别与res
中元素产生新元素[2], [1, 2]
,组合后新的res
为[[], [1], [2], [1, 2]]
num
为3
,分别与res
中元素产生新元素[3], [1, 3], [2, 3], [1, 2, 3]
,组合后新的res
为[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]
const subsets = nums => {
const res = [[]];
for (let num of nums) {
const temp = [];
for (let resItem of res) {
temp.push([...resItem, num]);
}
res.push(...temp);
}
return res;
};
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11