LeetCode70 爬楼梯
题目
解题
以下题目解题方法相同,区别点是根据题干,动态转移方程会有差异。
题目 | 解题 |
---|---|
面试题 08.01. 三步问题 | 三步问题题解 |
剑指 Offer 10- I. 斐波那契数列 | 斐波那契数列题解 |
70. 爬楼梯 | 爬楼梯 |
剑指Offer 10- II 青蛙跳台阶问题 | 青蛙跳台阶问题 |
解题一:制表法自上而下递归
// javascript
var climbStairs = function(n) {
const memos = new Array(n + 1).fill(-1); // 制表
return climbStairsHelper(n, memos);
};
const climbStairsHelper = (n, memos) => {
if (n < 0) return 0;
if (n === 0) return 1;
if (memos[n] === -1) {
memos[n] = climbStairsHelper(n - 2, memos) + climbStairsHelper(n - 1, memos);
}
return memos[n];
};
解题二:动态规划自下而上递推
// javascript
var climbStairs = function(n) {
if (n < 2) return 1;
let p = 1, q = 1, r;
for (let i = 2; i <= n; i++) {
r = p + q;
p = q;
q = r;
}
return r;
};
解题三:矩阵快速幂
f ( x ) + c = 2 [ f ( x − 1 ) + c ] + 3 [ f ( x − 2 ) + c ] f(x) + c = 2[f(x-1)+c]+3[f(x-2)+c] f(x)+c