题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思考误区: 题目问的是有多少种方法可以到达第N阶,而不是到达第N阶需要几步。
题目分析:
| 台阶 | 方法 |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 5 |
| --- | --- |
| n | (n-1)+(n-2) |
由题目分析可知,该题目的本质上是一个斐波那契数组。
思考:
- 创建一个dp数组,dp[i]:表示到达第i个台阶有dp[i]个方法
- 递推公式:F(n) = F(n - 1) + F(n - 2)
- 初始化:dp[1]=1,dp[2]=2
- 遍历顺序:从前往后,i=3
- 打印出dp数组,对比dp数组与预期的dp数组是否一致。
代码
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
var dp=[];
dp[1]=1;
dp[2]=2;
for(let i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
};
结果