LeetCode
回溯
回溯的本质是穷举,列出所有的组合,从中找到符合的答案。
回溯的模板
每次递归都是为了找到路径的其中一个组成节点,符合条件的路径就是其中一个答案。
1 | void backtracking(参数) { |
for循环的开始下标是0还是startIndex
一般情况下都是0,主要考虑什么时候是startIndex:
- 当数组有序,这一层选了某个数字之后,下一层不能选更小的数字,比如大部分组合问题
- 字符串,这一层选了某个子串,下一层要从后一个索引位置开始,比如切割问题
去重
树层去重
一般用到used[]数组都是全局的,可用于数层或者树枝;
有时候也可以放backTracking内部,只用于本树层
1 | // 使用全局used[]数组 |
树枝去重
1 | if (i > 0 && candidates[i] == candidates[i - 1] && used[i - 1] == true) { |
剪枝
TODO
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 白兰!