第三周学习
1. 总结
这周学习了泛型递归,分治和回溯,理解起来不是很难,但是做题总是没有思路,递归这块还是有很多好题目,回溯的八皇后就很有意思
2. 知识
2.1 泛型递归
- 自己调自己
- 重复性(找最小重复单元)
代码模版
def recursion(level, param1, param2, ...):# recursion terminator# 递归终止条件if level > Max_level:process_resultreturn# process logic in current level# 处理逻辑process(level, data...)# drill down# 递归调用(下钻)self.recursion(level+1, p1, p2,...)# reverse the current level status if needed# 清理变量,一般不需要,但是不能忘记
思维要点
也是递归
- 找重复性
- 将大问题分解成一个个小问题
- 将小问题的结果组合成最终结果
代码模版
# Pythondef divide_conquer(problem, param1, param2, ...):# recursion terminatorif problem is None:print_resultreturn# prepare datadata = prepare_data(problem)subproblems = split_problem(problem, data)# conquer subproblemssubresult1 = self.divide_conquer(subproblems[0], p1, ...)subresult2 = self.divide_conquer(subproblems[1], p1, ...)subresult3 = self.divide_conquer(subproblems[2], p1, ...)…# process and generate the final resultresult = process_result(subresult1, subresult2, subresult3, …)# revert the current level states
思维要点
- 和递归相比多了中间结果的组合
分治三部曲
中心思想
- 能进则进,进不了则换,换不了则退

3. 刷题
完成了作业中的两个递归,一个回溯,CPU疼
3.1 236. 二叉树的最近公共祖先
3.2 105. 从前序与中序遍历构造二叉树


- 剪枝不是很理解
