解决哪类问题
代码模板
- 模板要素
- 路径集<路径<选择>>的含义?
- 结束条件是什么?
- 如何枚举选择?
- 选择如何符合要求?
List<List<Integer>> 路径集 = new ArrayList<>();private void backtrack(路径, 选择or选择列表) {if(满足结束条件) {路径集.add(路径); // 深拷贝return;}for (选择: 选择列表) {if(选择符合要求) {路径.add(选择); // 做选择backtrack(路径, 新选择or新选择列表); // 对新的未探索区域递归路径.remove(路径.size() - 1); // 撤销选择}}}
复杂度
O(所有节点的规模)运用思想
回溯、递归例题
| 题目 | 难度 | 推荐指数 | | —- | —- | —- | | 17. 电话号码的字母组合 | 中等 | 🤩🤩🤩🤩 | | 37. 解数独 | 困难 | 🤩🤩🤩🤩 | | 39. 组合总和 | 中等 | 🤩🤩🤩🤩 | | 40. 组合总和 II | 中等 | 🤩🤩🤩🤩 | | 90. 子集 II | 中等 | 🤩🤩🤩🤩 | | 131. 分割回文串 | 中等 | 🤩🤩🤩🤩 | | 212. 单词搜索 II | 困难 | 🤩🤩🤩 | | 301. 删除无效的括号 | 困难 | 🤩🤩🤩🤩 | | 306. 累加数 | 中等 | 🤩🤩🤩🤩 | | 797. 所有可能的路径 | 中等 | 🤩🤩🤩🤩 | | 1219. 黄金矿工 | 中等 | 🤩🤩🤩🤩🤩 | | 剑指 Offer 38. 字符串的排列 | 中等 | 🤩🤩🤩🤩 |
