爬楼梯

121 阅读1分钟

题目描述:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思考误区: 题目问的是有多少种方法可以到达第N阶,而不是到达第N阶需要几步。

题目分析:

台阶方法
11
22
33
45
------
n(n-1)+(n-2)

由题目分析可知,该题目的本质上是一个斐波那契数组。

思考:

  1. 创建一个dp数组,dp[i]:表示到达第i个台阶有dp[i]个方法
  2. 递推公式:F(n) = F(n - 1) + F(n - 2)
  3. 初始化:dp[1]=1,dp[2]=2
  4. 遍历顺序:从前往后,i=3
  5. 打印出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];
};

结果

image.png