leetcode 笔记

经典的爬楼梯问题
(斐波那契数列)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
//逆向递归方法会超时
// public int climbStairs(int n) {
// if (n==1) return 1;
// if (n==2) return 2;
// return climbStairs(n-1) + climbStairs(n-2);
// }
// //顺向累加可以
// public int climbStairs(int n) {
// if (n==1) return 1;
// int last = 1, lastlast = 1;
// int now = 0;
// for(int i=2;i<=n;i++){
// now = last + lastlast;
// lastlast = last;
// last = now;
// }
// return now;
// }
//记忆化搜索,每一步都记录下来了
public int climbStairs(int n) {
int[] result = new int[n+2];
result[1] = 1;
result[2] = 2;
for(int i=3;i<=n;i++){
result[i] = result[i-1] + result[i-2];
}
return result[n];
}
}