题目
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例:
输入: 2
输出: 2
输入: 3
输出: 3
题解
先来看看前面几级楼梯有多少种方法:
n | 方法 | 解释 |
---|---|---|
1 | 1 | 1 |
2 | 2 | 1+1、2 |
3 | 3 | 1+1+1、1+2、2+1 |
4 | 5 | 1+1+1+1、1+2+1、1+1+2、2+1+1、2+2 |
5 | 8 | 1+1+1+1+1、1+2+1+1、1+1+2+1、1+1+1+2、2+1+1+1、2+2+1、2+1+2、1+2+2 |
6 | 13 | 1+1+1+1+1+1、… |
基本上可以看出一个规律是n级阶梯的爬楼梯方法等于前两级方法数的和,即
F(n) = F(n-1) + F(n-2)
也就是一个斐波那契数列,知道了这个代码就很好写了,从第3级开始循环计算即可。
代码
class Solution {
public int climbStairs(int n) {
if (n == 1 || n == 2) {
return n;
}
int first = 1;
int second = 2;
int third = 0;
for (int i = 3; i <= n; i++) {
third = first + second;
first = second;
second = third;
}
return third;
}
}