一、题设
给你一个整数数组 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