[LeetCode70. 爬楼梯][简单] | 刷题打卡

158 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述:

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

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

注意:给定 n 是一个正整数。

示例 1:

输入: 2 输出: 2

解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶 示例 2:

输入: 3 输出: 3

解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

题目链接:leetcode-cn.com/problems/cl…

二、思路分析:

首先考虑爬到n阶的方法,等于n-1阶的方法再爬一步和等于n-2阶的方法再爬两步之和, 即f(n) = f(n-1) + f(n-2)

三、AC 代码:

var climbStairs = function(n) {
    let f = []
    f[1] = 1
    f[2] = 2
    for(let i=3;i<=n;i++){
        f[i] = f[i-1] + f[i-2]
    }
    return f[n]
};

四、总结:

这里需要注意的是,循环的时候i是从3开始的,因为题目里说明了n是一个正整数,所以不存在n为0的情况,即f[2] = f[1] + f[0]不存在; 然后是要先初始化f[1]和f[2]的情况。

另外,对于台阶n,有两种跳法,所以公式是f(n)=f(n-1)+f(n-2)。那为啥不是f(n)=1+f(n-1)+2+f(n-2)呢?

因为这里问的是跳法,在动态规划或者递归的思路里,对于第n阶台阶来说,只有两种跳法,一种是从第n-1阶一步就跳上去,一种是从n-2阶直接跳两阶一步上去,这里的“一阶一步”和“两阶一步”分别对应题干给出的跳法。所以对应的应该是1f(n-1)+1f(n-2)。前面的两个1分别代表n-1、n-2到n的方法数,后面的f(n-1)代表的就是到达台阶f(n-1)的跳法。

用数学来说就是,现在从A到B再到C,A到B的走法有a种,B到C的走法有b种,那么A到C的走法就是ab种。A到B的任何一种走法和B到C的任何一种走法,都可以组合成一条A到C的走法,这就是ab。

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位