假设你正在爬楼梯。需要ñ步你才能到达楼顶。
每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定ñ是一个正整数。
示例1:
输入: 2 输出: 2 解释:有两种方法可以爬到楼顶。 1. 1步+ 1步 2. 2步
示例2:
输入: 3 输出: 3 解释:有三种方法可以爬到楼顶。 1. 1步+ 1步+ 1步 2. 1步+2步 3. 2步+ 1步
思路:此问题为斐波那契数,可以写出递归式,但是有时间问题,采取一种保存以及计算过的结果的方法,压缩时间。
class Solution {
int sum;
public int climbStairs(int n) {
//直接递归解决,有时间问题
// if (n == 1 || n == 2)
// sum = n;
// else
// sum = climbStairs(n - 2) + climbStairs(n - 1);
// return sum;
int result = 0;
// 只有一阶
if (n == 1) {
result = 1;
}
// 只有两阶
else if (n == 2) {
result = 2;
}
// 楼梯阶数大于2
else if (n > 2) {
// 因为直接递归会有时间超限问题,已保存已经计算过的结果,减少时间
int[] a = new int[n];
a[0] = 1;
a[1] = 2;
for (int i = 2; i < a.length; i++) {
a[i] = a[i - 1] + a[i - 2];
}
result = a[a.length - 1];
}
return result;
}
}