動態規劃——LeetCode爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

  • 示例 1:

    輸入: 2
    輸出: 2
    解釋: 有兩種方法可以爬到樓頂。

    1. 1 階 + 1 階
    2. 2 階
  • 示例 2:

    輸入: 3
    輸出: 3
    解釋: 有三種方法可以爬到樓頂。

    1. 1 階 + 1 階 + 1 階
    2. 1 階 + 2 階
    3. 2 階 + 1 階
/*
class Solution {
    public int climbStairs(int n) {
        方式1  先寫暴力遞歸 (超出時間限制) 
        分析: 若是1開頭,則剩餘的臺階數爲n-1,計算n-1階的多少種走法  N1
              若是2開頭,則剩餘的臺階數爲n-2,計算n-2階的多少種走法  N2
              求和sum = N1 + N2;
              返回sum
    
        int sum = 0;
        if(n == 1 || n == 0)
            return 1;
        int N1 = climbStairs(n-1);
        int N2 = climbStairs(n-2);
        
        sum = N1 + N2;
        return sum;   
    }
}
*/
class Solution {
    public int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        //方式2  改成動態規劃
        /* 
        分析: dp[i] = dp[i-1] + dp[i-2];
        */
        int[] dp = new int[n+1];  //索引從dp[1]開始,dp[1]存儲的是臺階數爲1的多少種走法
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2; i < dp.length; i++){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];   
    }
}

執行用時 : 1 ms, 在Climbing Stairs的Java提交中擊敗了61.14% 的用戶
內存消耗 : 33.2 MB, 在Climbing Stairs的Java提交中擊敗了69.02% 的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章