動態規劃走樓梯 演算法題解之爬樓梯

2021-10-16 11:03:55 字數 1142 閱讀 5073

假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是乙個正整數。

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

1. 1 階 + 1 階

2. 2 階

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

1. 1 階 + 1 階 + 1 階

2. 1 階 + 2 階

3. 2 階 + 1 階

這是乙個經典的面試題,如題目所說,每次只能爬1個或者2個台階,我們需要將問題拆解

要爬n階樓梯,是不是到了後面就是到了 n-1階,再爬1階或者是 n-2階再爬2階?

要到 n-1階的話,就是再把n-1當作是 n 看,重新再爬一次。

由此得出所有的方法即是 f(n) = f(n-1) + f(n-2)

舉個例:

如果 n = 0,即爬0級,我們看成是1種方案,即 f(0) = 1

如果 n = 1,即爬1級,我們也只需要走一步即可,即f(1) = 1

那麼f(2) = f(1) + f(0) = 2,即如果有兩階,我們有兩種方法,1階爬兩次或者是一次爬2階

f(3) = f(2) + f(1) = 3,如果有三階,我們有三種方法,1階爬三次,先爬1階再爬2階,先爬2階再爬1階

由此類推,這就是乙個典型的斐波那契數列

class solution 

}

這種遞迴解法雖然也是正確的,但是卻是最差的一種解法,因為它的時間複雜度是最高的,甚至很大可能會超時,因為要在這基礎上進行優化
這裡其實有個點就是 f(n) = f(n-1) + f(n-2),我們可以定義三個變數,在迴圈的過程中,不斷替換其中的值最後的結果 fn,就是所有的方法數

動態規劃走樓梯 Leetcode 70 爬樓梯

從本題中我們可以學到包含重複子問題,可以採用記憶化的方式,復用計算後的值 並用動態規劃的思想,找到動態轉移方程,採用迴圈實現。題目描述 題目 假設我們需要爬乙個樓梯,這個樓梯一共有 n 階,可以一步跨越 1 個或者 2 個台階,那麼爬完樓梯一共有多少種方式?示例 輸入 2 輸出 2 有2種方式可以爬...

動態規劃走樓梯 leetcode 70 爬樓梯

力扣 leetcode cn.com 題目描述 假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入...

演算法之動態規劃(爬樓梯)

通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。若要解乙個給定問題,我們需要解其不同部分 即子問題 再合併子問題的解以得出原問題的解。通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量 一旦某個給定子問題...