返回
LeetCode 题解:70. 爬楼梯,用递归+哈希表的 JavaScript 解决方案,附详细注释
前端
2023-10-20 09:08:43
理解问题
我们首先来看看 LeetCode 题解:70. 爬楼梯的具体内容:
假设你正在爬楼梯。需要 n 阶台阶才能到达楼顶。每次你可以爬 1 个或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
分解问题
现在,我们已经理解了问题,接下来我们将逐步分解它:
- 定义一个函数
climbStairs(n)
,它接受一个参数n
,表示到达楼顶所需的台阶数。 - 在函数内部,我们首先检查
n
是否等于 0 或 1。如果是,我们直接返回 1,因为到达楼顶只有一种方法:爬 1 个或 2 个台阶。 - 接下来,我们检查
n
是否在哈希表中。如果在,我们直接返回哈希表中的值,因为我们已经计算过这个值了。 - 如果
n
不在哈希表中,我们就需要计算它。我们使用递归调用climbStairs(n-1)
和climbStairs(n-2)
来计算到达楼顶的方法数。 - 最后,我们将计算结果添加到哈希表中,并返回它。
JavaScript 解决方案
/**
* 计算到达楼顶的不同方法数
*
* @param {number} n 到达楼顶所需的台阶数
* @return {number} 到达楼顶的不同方法数
*/
const climbStairs = (n) => {
// 哈希表,用于存储已经计算过的值
const memo = {};
// 如果 n 等于 0 或 1,直接返回 1
if (n === 0 || n === 1) {
return 1;
}
// 如果 n 在哈希表中,直接返回哈希表中的值
if (memo[n]) {
return memo[n];
}
// 计算到达楼顶的方法数
const result = climbStairs(n - 1) + climbStairs(n - 2);
// 将计算结果添加到哈希表中
memo[n] = result;
// 返回计算结果
return result;
};
运行结果
我们运行一下这个 JavaScript 解决方案,看看结果:
console.log(climbStairs(2)); // 2
console.log(climbStairs(3)); // 3
console.log(climbStairs(4)); // 5
输出结果:
2
3
5
我们可以看到,我们的 JavaScript 解决方案可以正确地计算到达楼顶的不同方法数。