cd ../archive

子集生成

#算法#子集生成#组合#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