掘金团队号上线,助你 Offer 临门! 点击 查看详情
一、题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2 输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶 示例 2:
输入: 3 输出: 3
解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
二、思路分析:
首先考虑爬到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。
本文正在参与掘金团队号上线活动,点击 查看大厂春招职位