LC-70. 爬楼梯

120 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

假设你正在爬楼梯。需要 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

题解

这道题,我们如何通过 动态规划 的思路方式来进行解决。

首先确定步骤,由题可知

  • 第 0 个台阶时,我们默认给它 0

  • 第 1 个台阶时,只有1种方案

  • 第 2 个台阶时,有 2 种方案

  • 第 3 个台阶时,有 3 种方案

  • 第 4 个台阶时,有 5 种方案

  • 第 5 个台阶时,有 8 种方案

此时我们能够看到,每个台阶就是前两个台阶的和

可以很快得到公式为:dp[i] = dp[i - 1] + dp[i - 2]

初始化的数据为:[0, 1, 2]

动态规划

const climbStairs = (n) => {

  // 初始化数组
  let dp = [0, 1, 2]

  // 遍历顺序 从头到尾
  for (let i = 2; i <= n; i++) {
    // 递推公式
    dp[i] = dp[i - 1] + dp[i - 2]
  }

  return dp[n]
}

总结

题目 24 :这道题也是入门动态规划的一道题,它相对于 斐波那契数列 而言,需要自己画一下,思考一下,才能得到相关的规律。