leetCode|爬樓梯

題目:假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。

示例 1:

  • 輸入: 2
  • 輸出: 2

解釋: 有兩種方法可以爬到樓頂。

  • 1 階 + 1 階
  • 2 階

示例 2:

  • 輸入: 3
  • 輸出: 3

解釋: 有三種方法可以爬到樓頂。

  • 1 階 + 1 階 + 1 階
  • 1 階 + 2 階
  • 2 階 + 1 階
Java代碼
// 動態規劃
class Solution {
    public int climbStairs(int n) {
        if (n == 1) return 1;
		int first = 1, second = 2, third = 0;
		for (int i = 3; i <= n; i++) {
			third = first + second;
			first = second;
			second = third;
		}
		return second;
    }
}

// 斐波納契
class Solution {
	public int climbStairs(int n) {
				if (n == 1) return 1;
		int[] dp = new int[n+1];
		dp[1] = 1;
		dp[2] = 2;
		for (int i = 3; i <= n; i++) {
			dp[i] = dp[i-1] + dp[i-2];
		}
		return dp[n];
	}
	}
}
說明:爬樓梯屬於動態規劃問題,第n階的方法由第n-1階方法數和由第n-2階方法數總和組成。
結果

執行用時 :0 ms, 在所有 Java 提交中擊敗了100.00%的用戶
內存消耗 :33.1 MB, 在所有 Java 提交中擊敗了71.22%的用戶

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