77. 组合
-< 总结回溯的模板
1.
def backtracking(参数):
if (终止条件):
存放结果
return
for i in range(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)):
backtracking()
回溯,撤销处理的结果
代码:
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
result = []
path = []
def backtracking(n,k,startIndex):
if k==len(path):
result.append(path[:])
return
for i in range(startIndex,n+1):
path.append(i)
backtracking(n,k,i+1)
path.pop()#回溯进行撤销结果
backtracking(n,k,1)#初始化
return result
总结:回溯算法是一棵树上的深度优先遍历
类似本题,1-2
-3
-4
-4等等,其中可以加入剪枝加速
叶子节点信息体现在根节点到叶子结点的路径上,用path(栈)表示
每一个接待你递归做同一件事,区别在于起点(startIndex)
剪枝