题目
假设你正在爬楼梯。须要 n 阶你才能到达楼顶。
每次你能够爬 1 或 2 个台阶。你有多少种不一样的方法能够爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法能够爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法能够爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
思路
- 根据题目的规律能够推出数列的规律,二、三、五、8...,是一个斐波那契数列;
- 5 = 2 + 3 ==> b = a + b,a = b - a;
- 当n小于等于3的时候是它自己,当n大于3的时候是拿上的规律。
java
class Solution {
public int climbStairs(int n) {
int a1 = 2;
int a2 = 3;
int res = 0;
if(n < 4) {
return n;
}
while(n > 3) {
res = a1 + a2;
a2 = a1 + a2;
a1 = a2 - a1;
n--;
}
return res;
}
}