假定有一个LeetCode题目
1. 使用递归算法
我们需要判断改题目是否由多个子任务组成,可以嵌套成递归的形式,在这一步我们往往需要一个递归表达式。
当有中间状态时
有时候我们在处理路径搜索,有中间状态如状态矩阵时,我们需要设定一个容器存储中间状态的数值。一般我们会设定一个与初始矩阵同等大小的矩阵作为容器。更新路径的信息。
2.使用动态规划Dynamic Programming
动态规划是一种多阶段决策最优解的模型,一般用以求最值。可用于自下而上的递推求解。
使用动态规划要满足三个条件:
- 多阶段决策
- 最优子结构
- 自下而上(求状态转移方程)
基本思路
- 首先判断是否可使用递归法求解,并列出递归法的树状图
- 再判断在递归的过程中是否存在大量的重复计算的子问题,假如存在重复问题,说明使用递归法会有大量的重复计算,影响效率
- 然后用备忘录记录子问题与其计算记录(记录中间状态)
- 最后改用自下而上的方法重新递推,得到的解法即为动态规划