上篇文章中讲到回溯算法的本质就是暴力搜索,但是可以通过剪枝来进行优化。
那么,剪枝到底剪了什么?如何剪?
我们仍然以上篇文章的组合问题来进行讨论。
Carl师兄的网站上给出的剪枝优化的图如下:
为了对比,我们先查看原始的回溯算法输出:
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res = []
path = []
def backtrack(n, k, StartIndex):
if len(path) == k:
res.append(path[:])
return