**理论基础 **
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
77. 组合
为啥一定要result.append(path[:]),因为在python里面,如果result.append(path),就是加了path的指针,path后面发生什么变化,result也会随之发生变化
但是如果path[:],那就是直接复制粘贴
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
result = []
self.backtracking(n, k, 1, [], result)
return result
def backtracking(self, n, k, startingIndex, path, result):
if len(path) == k:
result.append(path[:])
return
for i in range(startingIndex, n+1):
path.append(i)
self.backtracking(n, k, i+1, path, result)
path.pop()
标签:24,int,self,随想录,append,算法,result,path,backtracking
From: https://www.cnblogs.com/miramira/p/18133188