理论介绍
回溯算法的本质是穷举 这点非常重要 穷举就决定了这不是一个高效的算法
事实上有些问题能够通过暴力搜索求解出来就很不错了
我们穷举出所有可能情况 然后选出我们想要的答案
回溯法解决的问题都能够抽象成树形结构
算法框架
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
Leetcode例题
76 组合
216组合求和
题目很相似 画出回溯的树形图 然后根据问题实际情况 制定好相应的优化给树减枝即可