# 子集(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初始化为[[]]
  • num1,分别与res中元素产生新元素[1],组合后新的res[[], [1]]
  • num2,分别与res中元素产生新元素[2], [1, 2],组合后新的res[[], [1], [2], [1, 2]]
  • num3,分别与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