给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
🚀核心挑战:清楚回溯撤销的原理,会绘画递归搜索树帮助理解
🎈算法步骤:
1、定义res=[]用来存放结果,path=[]选择的路径,nums选择的数组
2、开始函数递归函数的参数是def backtrack(path,strart):每次传入参数start要等与i+1.确保不会出现重复的情况,每次递归都要把当前路径里面已选择的数复制到结果res里面
3、最后进行回溯,开始进行撤销
完整Python代码
defsubsets(nums):res=[]defbacktrack(path,strart):res.append(path[:])foriinrange(strart,len(nums)):path.append(nums[i])backtrack(path,i+1)path.pop()backtrack([],0)returnres nums=[1,2,3]print(subsets(nums))虽然很少,但是重要的是理解怎么撤销的这一步需要对函数递归有一定的理解,每一次backtrack的调用都是在调用栈上分配一份自己的局部变量: