子集生成
#算法#子集生成#组合#LeetCode
题目
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
解析
- 构造一个空子集(
[[]]),利用当前子集结合一个数字生成新的子集,再使用这个子集([[], [1]])结合新的数字生成子集([[], [1], [2], [1, 2]]),不断迭代即可
注意
因为此处是组合问题,也就是说 [1, 2] 和 [2, 1] 是等价的,所以在循环生成子集时,nums一定要在外侧循环,避免重复使用数字
def subsets(self, nums: list[int]) -> list[list[int]]:
res = [[]]
for num in nums:
for i in range(len(res)):
res.append(res[i] + [num])
return res