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?
分析:
上台阶问题,属于最简单的动规问题。
子问题:上 i 级台阶有几种方式, dp[i],
状态转移方程:
因为有两种状态转移方式,我们就看这两种转移方式怎么组合转换,就这道题来讲,是相加的方式:
dp[i] = dp[i-1] + dp[i-2]
public class Solution {
public int climbStairs(int n) {
//最简单的动规问题了
if(n==0 || n==1 || n==2)
return n;
int[] dp = new int[n];
dp[0] = 1;
dp[1] = 2;
for(int i=2; i<n; i++)
dp[i] = dp[i-1] + dp[i-2];
return dp[n-1];
}
}