70. Climbing Stairs


You are climbing a staircase. 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入门第一题。DP实质就是cache, 把之前出现过的中间结果记录,下次再出现相同情况的时候,通过DP table可以只用O(1)的时间复杂度得到。
dp[i]表示到达第i层楼梯的不同走法。
那么题目中每次可以选择走一步,或者两步,dp[i] = dp[i-1] - dp[i-2]。
从迭代公式可以知道,base case有两个,dp[0]和dp[1]。

public class Solution {
    public int climbStairs(int n) {
        if(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];
    }
}

大米中的大米
12 声望5 粉丝

你的code是面向面试编程的,收集和整理leetcode discussion里个人认为的最优且最符合我个人思维逻辑的解法。