子集-LeetCode

题目:

给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets

思路:

  1. 个人觉得这道题没有说清楚,整数数组是否会含有重复数字,如果是的话那官方题解也是有问题的,需要先去重才行。
  2. 迭代法:遍历元素,将该元素添加到目前所有存在的子集中,组成新的子集
  3. 递归回溯:遍历元素,缩小遍历范围即可生成不同长度的子集,同时将子集添加到结果中

代码:

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        '''
        # 迭代法:
        res = [[]]
        # 将每个子集都加上遍历到的元素组成新子集
        for i in nums:
            res += [[i]+ r for r in res]
        return res
        '''
        # 递归回溯
        res = []
        def helper(i, temp):
            # 添加子集
            res.append(temp)
            for j in range(i, len(nums)):
                helper(j+1, temp+[nums[j]])
        helper(0, [])
        return res

猜你喜欢

转载自blog.csdn.net/qq_35221523/article/details/112156980