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?

还是简单的动态规划问题,很明显可以发现。

dp[i] = dp[i-2]+dp[i-1]

public class Solution {
    public int climbStairs(int n) {
        if( n == 0 )
            return 0;
        if( n == 1)
            return 1;
        if( n == 2)
            return 2;
        int[] dp = new int[n];
        dp[0] = 1;
        dp[1] = 2;
        for( int i = 2;i<n;i++){
            dp[i] = dp[i-2]+dp[i-1];
        }
        return dp[n-1];}
}