面试题 08.04. 幂集

题目描述:编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。

示例:

输入: 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]]:
        result = []
        result.append([])
        for i in nums:
            l = len(result)
            j = 0
            while j < l:
                result.append(result[j]+[i])
                j += 1
        return result 

方法二:回溯法

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res = []
        def backtrack(nums, path, res):
            res.append(path)
            if nums == []:
                return 
            for i in range(len(nums)):
                backtrack(nums[i+1:] , path + [nums[i]], res)     
        backtrack(nums, [], res)
        return res
posted @ 2020-04-20 10:24  USTC丶ZCC  阅读(261)  评论(0编辑  收藏  举报