二叉树章节完成
回溯章节开始
回溯算法:
什么是回溯?
回溯是递归的副产品,只要有递归机会有回溯。
回溯法的效率?
回溯法本质就是穷尽,效率可想而知,但是既然效率如此之低,为什么还要使用它呢?因为存在问题能通过暴力求解出来就很不错了,不存在更高效的解法,只能暴力穷举。
回溯法解决的问题?
组合问题:N个数字里面找寻k个数字的组合。
· 切割问题:切割一个字符串的所有可能。
子集问题:一个集合的子集。
排列问题:N个数按照一定规则全排列.
棋盘问题:N皇后等等。
回溯法模板;
函数伪代码:
1,返回值以及参数
· void(int[]nums,int startindex....)
一般来说传递的参数都是原始数组以及判断开始的索引
2,结束条件:
if(终止条件){
添加结果
return
}
3,回溯函数遍历
for(选择;集合数量 ;++){
处理节点
backTracking(参数);
回溯,撤销处理结果
}
完整模板
void backTracking(参数){
if(参数){
添加结果
return
}
for(选择;集合中的元素;++){
处理节点
backTracking(参数);
回溯,撤销处理
}
}
明天开始书写每个题目的博客,跑了四公里有点累,睡觉
By-三条直线围墙