LeetCode刷题(python版)——Topic78. 子集

  • Post author:
  • Post category:python


一、题设


给你一个整数数组



nums



,数组中的元素



互不相同



。返回该数组所有可能的子集(幂集)。


解集



不能



包含重复的子集。你可以按



任意顺序



返回解集。


示例 1:

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


示例 2:

输入:nums = [0]
输出:[[],[0]]

二、基本思路



回溯法


呀,回溯三部曲:


1.确定函数参数

:传统的排列组合题一般直接有一个


原数组


出、一个


空数组


入。


2.收集的条件

:在存满数返回即可,不过有区别的是,


收集结果是在循环的加数前面收集



3.下一趟的参数怎么修改

:将当前的数加入tmp中,从


当前数截断





将之后的数组作为新数组传入


即可,回溯


在tmp中弹出这个数


就可以。

三、代码实现

class Solution(object):
    def subsets(self, nums):
        res = []
        res.append([])
        n = len(nums)
        def backtracking(tmp,nums,nn):
            if len(tmp) == nn:
                return
            for i in range(len(nums)):
                tmp.append(nums[i])
                res.append(tmp[:])
                backtracking(tmp,nums[i+1:],nn)
                tmp.pop()
        backtracking([],nums,n)
        return res

四、效率总结



版权声明:本文为weixin_54039182原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。