【LeetCode】70. 爬楼梯(简单)——代码随想录算法训练营Day38

题目链接:70. 爬楼梯

题目描述

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

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

示例 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

文章讲解:代码随想录

视频讲解:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题解1:动态规划

思路:1个台阶有1种走法,2个台阶有2种走法(1+1和2)。3个台阶可以看成在1个台阶的走法上再走2步,或者在2个台阶的走法上再走1步;4个台阶可以看成在3个台阶的走法上再走2步,或者在2个台阶的走法上再走1步。即 n 个台阶的走法可以看成在 n - 2个台阶的走法上再走2步,或者在 n - 1个台阶的走法上再走1步。因此可以用动态规划求解。

动态规划分析:

  • dp 数组以及下标的含义:dp[i] 为 i 个台阶的走法。
  • 递推公式:dp[i] = dp[i - 1] + dp[i - 2]。
  • dp 数组初始化:dp[0] 没有意义,dp[1] = 1,dp[2] = 2。
  • 遍历顺序:从前向后。
  • 打印 dp 数组:1、2、3、5、......
javascript 复制代码
/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    const dp = new Array(n + 1);
    dp[1] = 1; // 1个台阶有1种走法
    dp[2] = 2; // 2个台阶有2种走法
    for (let i = 3; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2]; // i 个台阶有 dp[i - 1] + dp[i - 2] 种走法
    }
    return dp[n];
};

分析:时间复杂度为 O(n),空间复杂度为 O(n)。

题解2:动态规划优化

思路:i 个台阶的走法依赖于 i - 1 和 i - 2 个台阶的走法,可以用两个变量存储,在循环中更新这2个变量。

javascript 复制代码
/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    if (n <= 2) {
        return n; // 1个台阶有1种走法,2个台阶有2种走法
    }
    let a = 1, b = 2; // a 为 i - 2个台阶的走法,b 为 i - 1 个台阶的走法
    for (let i = 3; i <= n; i++) {
        const c = a + b; // i 个台阶有 dp[i - 1] + dp[i - 2] 种走法
        a = b; // 更新 a
        b= c; // 更新 b
    }
    return b; // b 即为最终答案
};

分析:时间复杂度为 O(n),空间复杂度为 O(1)。

收获

当一个问题的答案依赖于较小的问题的答案时,可以使用动态规划法来求解。练习使用动态规划法解决问题,按照5部曲来分析。本题实际上是一个斐波那契数列。

相关推荐
快去睡觉~2 小时前
力扣73:矩阵置零
算法·leetcode·矩阵
岁忧2 小时前
(nice!!!)(LeetCode 每日一题) 679. 24 点游戏 (深度优先搜索)
java·c++·leetcode·游戏·go·深度优先
小欣加油2 小时前
leetcode 3 无重复字符的最长子串
c++·算法·leetcode
猿究院--王升5 小时前
jvm三色标记
java·jvm·算法
一车小面包5 小时前
逻辑回归 从0到1
算法·机器学习·逻辑回归
tt5555555555557 小时前
字符串与算法题详解:最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密
c++·算法·矩阵
元亓亓亓7 小时前
LeetCode热题100--101. 对称二叉树--简单
算法·leetcode·职场和发展
不会学习?8 小时前
算法03 归并分治
算法
NuyoahC8 小时前
笔试——Day43
c++·算法·笔试
2301_821919929 小时前
决策树8.19
算法·决策树·机器学习