leetcode 70 爬樓梯

ailinyingai發表於2020-11-26


描述:

假設你正在爬樓梯。需要 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 階

複製程式碼

思路:

這裡提供兩種思路:

1 回溯,即 f(n) = f(n - 1)+ f(n - 2),直接回溯的話,leetcode上會超時,所以可以自定義一個快取,用陣列來儲存結果。

2 動態規劃,可以當做斐波那契數列來接,用遞推的方式做,迴圈,從 f(1),f(0)開始加和到f(n)

程式碼1:

class Solution {
  public int climbStairs(int n) {
    int[] memory = new int[n + 1];
    return helper(n, memory);
  }

  private int helper(int n, int[] memory) {
    if (n <= 2) {
      return n;
    } else if (memory[n] == 0) {
      memory[n] = helper(n - 1, memory) + helper(n - 2, memory);
    }
    return memory[n];
  }
}
複製程式碼


結果1:

leetcode 70 爬樓梯

程式碼2:

class Solution {
    public int climbStairs(int n) {
        int a = 0;
        int b = 1;
        for(int i = 1;i<=n;i++){
          int c = a;
          a = b;
          b = c+b;
        }
        return b;
    }
}複製程式碼

結果2:

leetcode 70 爬樓梯


複製程式碼



相關文章