1. 程式人生 > >Leetcode題解之動態規劃(1)爬樓梯

Leetcode題解之動態規劃(1)爬樓梯

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming/54/

題目描述:

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

思路:暴力破解 耗時太長線上編譯過不了。

          分析:當n = 1的時候,f(1) = 1;當n = 2的時候,f(2) = 2;當n = 3的時候,f(3) = 3;當n = 4的時候,f(4) = 5,我們發現f(n) = f(n - 1) + f(n - 2)。這個時候我們可以發現這不就是個斐波那契數列嗎?我們可以採用遞迴的方式來做呀,再看斐波那契數列函式,也是動態規劃方程呀。

程式碼:

	public int bestStairs(int n) {
		if (n < 1)
			return 0;
		if (n == 1)
			return 1;
		if (n == 2)
			return 2;
		int sum = 0, sum1, sum2;
		sum1 = 1;
		sum2 = 2;
		for (int i = 2; i < n; i++) {
			sum = sum1 + sum2;
			sum1 = sum2;
			sum2 = sum;
		}
		return sum;
	}