一、题设
给你一个整数数组
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
四、效率总结