题解 | #斐波那契数列#
斐波那契数列
https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3
function Fibonacci(n) { return resolve2(n); } function resolve1(n) { let dp = []; dp[1] = 1; dp[2] = 1; for (let i = 3; i <= n; i++) { dp[i] = dp[i - 2] + dp[i - 1]; } return dp[n]; } function resolve2(n) { let first = 1, sec = 1, res = 1, i = 3; while(i <= n) { res = first + sec; first = sec; sec = res; i++; } return res; } module.exports = { Fibonacci: Fibonacci, };
dp五步法:
- dp [i]数组的含义和下标的定义
- dp 递推公式
- dp 初始化
- 遍历顺序
- 打印dp数组
明确是一维还是二维,弄清dp数组的含义。
动态规划的本质就是当前状态必定是由之前的状态转变而来的,状态的流向。
斐波那契数列比较简单,运用的方法也比较多,可以递归,也可以动态规划。一维的动态规划如果不需要保存过程状态,可以使用 resolve2() 用两个变量存储必要的前两个状态即可。