70.爬楼梯
方法一:动态规划滚动数组优化
class Solution {
public int climbStairs(int n) {
if (n <= 2) {
return n;
}
int a1 = 1, a2 = 2, a3 = 3;
for (int i = 3; i < n + 1; i++) {
a3 = a1 + a2;
a1 = a2;
a2 = a3;
}
return a3;
}
}
方法二:递归
class Solution {
public int climbStairs(int n) {
int[] memo = new int[n + 1];
return climbStairsMemo(n, memo);
}
public int climbStairsMemo(int n, int[] memo) {
if (memo[n] > 0) {
return memo[n];
}
if (n == 1) {
memo[n] = 1;
} else if (n == 2) {
memo[n] = 2;
} else {
memo[n] = climbStairsMemo(n - 1, memo) + climbStairsMemo(n - 2, memo);
}
return memo[n];
}
}