【python3数据结构】回溯算法

一般涉及找全集的都是用回溯算法

涉及题目: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)

 

你可能感兴趣的:(数据结构)