假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
class Solution {
public int climbStairs(int n) {
int p = 0, q = 0, r = 1;
for (int i = 1; i <= n; ++i) {
p = q;
q = r;
r = p + q;
}
return r;
}
}
class Solution {
static final ArrayList<Integer> CACHE;
static {
CACHE = new ArrayList();
CACHE.add(1);
CACHE.add(2);
}
public int climbStairs(int n) {
if(CACHE.size() < n) {
int c = climbStairs(n - 2) + climbStairs(n - 1);
CACHE.add(c);
return c;
} else {
return CACHE.get(n - 1);
}
}
}
class Solution {
private Map<Integer,Integer> storeMap = new HashMap<>();
public int climbStairs(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
if(null != storeMap.get(n)) {
return storeMap.get(n);
}
else{
int result = climbStairs(n - 1) + climbStairs(n - 2);
storeMap.put(n, result);
return result;
}
}
}