leeCode算法--爬楼梯问题

题目:假设你正在爬楼梯,需要n阶才能到达楼顶,每次你可以爬1或2个台阶,你有多少种不同爬到楼顶的方法?注:给定n是一个正整数。

分析:我们看下具体的解法:
0开始: 1种 –> 1
1第一节楼梯:1种 –> 1
2第二节楼梯:2种 –> 11, 2
3第三节楼梯:3种 –> 111, 12, 21
4第四节楼梯:5种 –> 1111, 121, 112, 211, 22
5第五节楼梯:8种 –> 11111, 1112, 1121, 1211, 2111, 221, 212, 122
.
.
.
1,1,2,3,5,8,13,21,44,65…
有没有发现一个规律,有没有,有没有,有没有,我擦…这不就是意大利数学家斐波那契额在1202年发现的那个兔子增长的规律吗?没错就是斐波那契数列。直接上代码:

1
2
3
4
5
6
7
8
let climbStairs = n => {
if (n <= 2) {
return n
}
return climbStairs(n - 1) + climbStairs(n-2)
}
climbStairs(6) // 8
climbStairs(10) // 55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let climbStairs = n => {
let val = []
for (let i = 0; i <= n;i++) {
val[i] = 0
}
if (n < 2) return 1
val[1] = 1
val[2] = 2
for (let i = 3; i <= n;i++) {
val[i] = val[i-1] + val[i-2]
}
return val[n]
}
climbStairs(6) // 8
climbStairs(10) // 55

Yes, So easy!

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Lee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信