Part1:
🔹理解题目
理解题目
🔹图示
声明:
图示是为了更好理解题目,所以会避免抽象的数学表达,以举具体例子形式标识。1. 树状图的每一个分支 表示binh_chess.possible_moves
返回的list
中每一个元素(move)
。图中此函数用P(x)
标识, 其中x
代表moves
。2.possible_moves
中的元素均以(单个小写字母) 以及 (下标) 标识。
图:

🔹解题思路(注意事项)
非递归版本(堆栈)
本题用不到:
**所有结构良好的递归都可以转化为 循环+栈 的形式**
Python本身不会优化尾递归, 不会节省调用栈, 所以跟普通栈一样会溢出。(大一上学期不会)
图示:

伪代码:
递归版本
为什么会想到递归?
- 大问题是否可以分解为小问题,而且大小问题结构相同?
- 问题小到什么程度,我可以说做完了?
- 经验:存在经典递归结构的树或图(DFS, 八皇后,棋盘搜索)(这些自己搜哈)
- (小声bb:一般数增的很快的,就可以考虑了)
递归题目基本步骤?
- 确定终止情况(base case)
对于本题来讲,为
depth == 1
还是 depth == 0
的情况?对于base case, 返回什么值?0 / 1 / 20?还是以上都不对?(提示:好好看图吧)- 把大问题转化为小问题。(这是最难的了…初级阶段可以想想
n - 1
,s[1: ]
之类的)
对于本题来说, 大问题:
depth
小问题depth - 1
(图中为横向, 层进式式关系)。 问题中的每种possible_move
用什么方法遍历?(图中为纵向, 并列式关系)- 优化(可选):合并?剪枝?(对时间复杂空间复杂度都很重要)(本题需要吗?)
伪代码:
🔹额外
点一下左边的三角
实际情况中,能不用递归就不用递归。
leetcode 难度选简单, 类型选递归递推,刷。