解题步骤
1. 对照题目画树形图
2.找到路径,选择和终止条件
路径:已经做好了的选择
选择:还可以做的选择
终止条件:可行的方案
3.算法是否有重复的地方,进行剪枝
框架伪代码
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
排除不合法选择
做选择
路径.add(选择)
backtrack(路径, 选择列表)
撤销选择
路径.remove(选择)
将该选择再加入选择列表
Leetcode上相关题目
参考
回溯算法详解 作者:labuladong