假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
思路:
n=1:一种走法
n=2:两种走法
n=3:走法为n=2的走法+走一阶,和n=1的走法+走两阶
n=4:走法为n=3的走法+走一阶,和n=2的走法+走两阶
.
.
.
可以看出这道题的解法和获得斐波那契函数一致,结果是上两次计算的结果。
代码实现:
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int[] a = new int[n];
a[0] = 1;
a[1] = 2;
for (int i = 2; i < n; i++) {
a[i] = a[i - 1] + a[i - 2];
}
return a[n - 1];
}