Skip to the content.

leetcode [78] 子集


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

思路:递归子问题,记 子子集 为第一个节点后子集,那么:

子集 = (第一个节点,子子集, 第一个节点和子子集的组合)

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        if len(nums) == 0:
            return []
        if len(nums) == 1:
            return [nums, []]
        
        result = [nums[:1]]
        subs = self.subsets(nums[1:])
        for ss in subs:
            if ss not in result:
                result.append(ss)
        for ss in subs:
            tmp = nums[:1] + ss
            if tmp not in result:
                result.append(tmp)
        return result