题目描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
动态规划
假设需要爬 5 个台阶 但是每次只能爬 1 或 2 个台阶
- 爬 1 个台阶
- 还需要爬 4 个台阶
- 爬 1 个台阶
- 还需要爬 3 个台阶
- 爬 2 个台阶
- 还需要爬 2 个台阶
。。。。。。
依次类推
- 爬 2 个台阶
- 还需要爬 3 个台阶
- 爬 1 个台阶
- 还需要爬 2 个台阶
- 爬 2 个台阶
- 还需要爬 1 个台阶
。。。。。。
依次类推
所以最终推算下来
dp[5] = dp[4] + dp[3]
dp[n] = dp[n-1] + dp[n-2]
var climbStairs = function (n) {
const dp = [];
// n只能是正整数 设置dp[0] = null
dp[0] = null;
// 第1级台阶只有 1 种步骤
dp[1] = 1;
// 第2级台阶只有 2 种步骤
dp[2] = 2;
for (let i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2]
}
return dp[n];
};
// const n = 5; // 8
// [ null, 1, 2, 3, 5, 8 ]
// console.log(climbStairs(n));