算法【简单-070. 爬楼梯】

26 阅读1分钟

Hello,大家好,我是disguiseFish,我最近在卷算法,但其实我的逻辑思维能力偏弱以及我之前就没有刷过算法!!所以我决定,每天写一点算法提升自己的逻辑思维!接下来我会从简入深的顺序来卷算法,同时会把看过的算法记录在这里~ 共勉!!!

070. 爬楼梯

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

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

例 1:

输入: n = 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入: n = 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

解决方案

思路: 定义一个空数组dp 第n项代表爬n阶楼层的方法数 最后输出dp的最后一位即我们要的答案

image.png 所以我们可以只遍历一次 算出第n项

 var climbStairs = function (n) {
    // dp 爬n阶楼层的方法数 
    let dp = []
    dp[0] = 0  // 0阶有0个爬楼层方法
    dp[1] = 1  // 1阶有2个爬的方法
    if (n === 1) return dp[1]
    dp[2] = 2  // 1阶有2个爬的方法
    // dp[3] = dp[1] + dp[2] = 3
    // dp[4] = dp[2] + dp[3] = 5
    for (let index = 3; index < n+1; index++) {
        dp[index] = dp[index-2] + dp[index-1]
    }
    return dp[n]
};