一般涉及找全集的都是用回溯算法
涉及题目:39.组合总和,40. 组合总和 II, 46. 全排列, 47. 全排列 II, 78. 子集, 90. 子集 II
'''
1. 初始化res,用于存所有结果
2. 定义back_track函数(递归), i是当前数组的下标,tmp保存中间结果
1) 将tmp中间结果存入res
2) 遍历剩下的元素,并进行回溯。
3) 对于j在[i+1, n)中,执行back_track(j, tmp + [nums[j]])
3. 执行back_track(-1, [])
4. 返回res
DP: DP[i] = DP[i-1] + [nums[i]+sub for sub in DP[i-1]]
'''
nums = [1, 2, 3]
res = []
def back_track(i, tmp):
res.append(tmp)
# print(res)
for j in range(i+1, len(nums)):
back_track(j, tmp + [nums[j]])
back_track(-1, [])
print(res)