78子集

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

来源:https://leetcode-cn.com/problems/subsets/

法一:自己的代码

思路:本题无需剪枝,直接回溯,关键是要确定好每次要遍历的元素

from typing import List
class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        results = []
        l = len(nums)
        def backtrack(a=[], nums=nums, count=0):
            # 如果够了回溯深度了,说明到底了,把值存储后返回
            if  count == l:
                results.append(a[:])
                return
            # 这里是关键,要先画图确定好每次回溯遍历的元素,
            # 因为这个最后实际上类似一个二叉树,所以每次只遍历一个元素
            for i in [nums[count]]:
                # 先压栈一次,进行回溯
                a.append(i)
                count += 1
                backtrack(a, count=count)
                # 再出栈一次,进行回溯,每个元素都是这样
                a.pop()
                backtrack(a, count=count)
        backtrack()
        return results
if __name__ == '__main__':
    duixiang = Solution()
    a = duixiang.subsets([1,2,3])
    print(a)
View Code