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 阶
思路分析
- 使用动态规划来解决本题;
- 定义一个数组来记录不同楼层所需要的方法数,
res[i]表示爬到第i层有res[i]种方法; - 我们可以看到上到第
i层时,从第i-1层再一步上一个台阶就是第i层,从第i-2层再一步上两个台阶就是第i层,那么可以得知,上到第i层存在的方法为res[i-1] + res[i-2]; - 边界值判定,若
n <= 1那么可直接返回n; - 确定
res的初值,1层楼梯有一种方法,2层楼梯有两种方法,那么从i=3开始循环,按照res[i] = res[i - 1] + res[i - 2]的公式来计算第i层楼梯可以到达的方法数,最后返回res[n]即可。
AC 代码
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
if(n <= 1) return n
const res = []
res[1] = 1
res[2] = 2
for(let i = 3; i <= n; i++) {
res[i] = res[i - 1] + res[i - 2]
}
return res[n]
};
结果:
- 执行结果: 通过
- 执行用时:68 ms, 在所有 JavaScript 提交中击败了32.20%的用户
- 内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了40.22%的用户
- 通过测试用例:45 / 45