回溯算法模板框架
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
LeetCode 77.组合
力扣题目链接
直接套用上面回溯算法的模板即可,需要注意的是这里有一个start
,作用是防止出现重复的组合
class Solution:
def __init__(self):
self.result = []
self.track = []
def combine(self, n: int, k: int) -> List[List[int]]:
self.backtrack(n, k, 1)
return self.result
def backtrack(self, n, k, start):
if len(self.track) == k:
self.result.append(self.track[:])
return
for i in range(start, n+1):
self.track.append(i)
self.backtrack(n, k, i + 1)
self.track.pop()
今日毕!