解题模板
解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:
路径:也就是已经做出的选择
选择列表:也就是你当前可以做的选择
结束条件:也就是到达决策树底层,无法再做选择的条件
回溯算法的模板代码:
1 | result = [] |
其核心就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」
案例代码
最基础,直接套模板
1 | /** |
1 | /** |
进阶
进阶题一般需要保证要去除重复项,所以一般会有一个数组用来记录已经走过的路径或者选过的值
1 | /** |
1 | /** |
困难
困难题目一般除了要利用回溯之外,还需要对选择的值做一些额外的判断是否满足可选中的要求,典型的如 51. N 皇后 问题:
1 | /** |
其它类似
1 | /** |
思路来自: labuladong的算法小抄