You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
即求菲波拉契数列,第一次
public int climbStairs(int n) {
int ans = 1;
if (n == 1) return ans;
if (n == 2) return ans;
ans = climbStairs(n-1) + climbStairs(n-2);
return ans;
}
超时,需要用DP来解决。
public int climbStairs(int n) {
int ans = 1;
int current = 1,prev = 2;
if (n == 1) return current;
if (n == 2) return prev;
for (int i = 2; i < n; i++){
ans = current + prev;
current = prev;
prev = ans;
}
return ans;
}