假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶
提示:
1 <= n <= 45
class Solution {
int []a = new int[46];
public int climbStairs(int n) {
if(n == 1)
return 1;
else if(n == 2)
return 2;
else {
if(a[n] != 0)
return a[n]; //已经计算过直接用不必再次计算
else{
// 没计算过的计算保存
a[n] = climbStairs(n - 1) + climbStairs(n - 2);
return a[n];
}
}
}
}
思路递归+算过的保存,减少二次计算。
a[n] = climbStairs(n - 1) + climbStairs(n - 2);
表示剩n阶楼梯是走1阶有 climbStairs(n - 1)种走法,走两阶有 climbStairs(n - 2)种走法,n阶共有climbStairs(n - 1) + climbStairs(n - 2)种走法。