1. 程式人生 > 其它 >LeetCode 70 爬樓梯

LeetCode 70 爬樓梯

技術標籤:資料結構與演算法動態規劃演算法

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

解題思路:

我們用 f(x) 表示爬到第 x 級臺階的方案數,考慮最後一步可能跨了一級臺階,也可能跨了兩級臺階,所以我們可以列出如下式子:

f(x) = f(x - 1) + f(x - 2)
它意味著爬到第 x 級臺階的方案數是爬到第 x - 1 級臺階的方案數和爬到第 x - 2 級臺階的方案數的和。很好理解,因為每次只能爬 1 級或 2 級,所以 f(x) 只能從 f(x - 1) 和 f(x - 2) 轉移過來,而這裡要統計方案總數,我們就需要對這兩項的貢獻求和。

以上是動態規劃的轉移方程,下面我們來討論邊界條件。我們是從第 0 級開始爬的,所以從第0 級爬到第 0 級我們可以看作只有一種方案,即 f(0) = 1;從第 0級到第 1級也只有一種方案,即爬一級,f(1) = 1。