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?
1. 常规数学解法
公式:f(3)=f(1)+f(2), f(1)=f(2), f(2)=f(3)
public int climbStairs(int n) {
int f1=1;
int f2=2;
if(n==1)
return f1;
if(n==2)
return f2;
for(int i=3; i<=n; i++) {
int f3 = f1+f2;
f1=f2;
f2=f3;
}
return f2;
}
动态规划解法
递推式 f(n)=f(n-1)+f(n-2)
public int climbStairs(int n) {
int[] result = new int[n + 1];
result[0] = 1;
result[1] = 1;
for (int i = 2; i <= n; i++)
result[i] = result[i - 1] + result[i - 2];
return result[n];
}