爬楼梯
题目:爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 通过数学统计归纳我们可以看到:
- n = 0 时,输出1
- n = 1 时,输出1
- n = 2 时,输出2
- n = 3 时,输出3
- n = 4 时,输出5 除开是以1开始外跟斐波那契数列几乎一摸一样,那么我们可以使用递归的方式来解决问题,如下: F(0) = 1,F(1) = 2, F(n) = F(n - 1) + F(n - 2) n>1
var climbStairs = function (n) {
if (n < 2) return 1
return climbStairs(n - 1) + climbStairs(n - 2)
};
1
2
3
4
2
3
4
如果n过大时很容易就会超时,所以这里我们使用动态规划来优化递归
var climbStairs = function (n) {
// 借助数组来存放每个n-1和n-2的结果
let arr = new Array(n + 1)
arr[0] = 1
arr[1] = 1
for(let i = 2; i <= n; i++) arr[i] = arr[i-1] + arr[i-2]
return arr[n]
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
上次更新: 2025/09/05, 8:09:00