有n層的台階,一開始你站在第0層,每次可以爬兩層或者一層。請問爬到第n層有多少種不同的方法?
follow up question: 如果每次可以爬兩層,和倒退一層,同乙個位置不能重複走,請問爬到第n層有多少種不同的方法?
這道題屬於簡單的陣列一維動態規劃
1. state:f[i] 表示爬到第i層的方法數目。
2. function: f[i] = f[i-1] + f[i-2] 第i層的方法數目等於第i-1層數目加上第i-2層數目
3. intialize: f[0] = 1, f[1] =1 初始化 最開始沒有爬和第一層的方法數目為1.
4. answer: f[n] 爬到第n層有多少種不同的方法
follow up question:
這道題與原來的題相比提公升了乙個難度,主要是倒退一層,這個地方可能會違背動態規劃無後效性的原則。 那麼我們要怎麼轉化呢?
由條件:同乙個位置不能重複走。我們可以知道如果要退步的話,不能退兩層以上,因為用兩步退兩層再一步前進兩層,那就會走相同的位置。所以我們最多只能退後一步。
那麼題目的條件就可以轉換兩種情況,
a.跳兩層(前進兩層)。
b.退一層跳兩層 (前進一層)。
1. state:f[i][0] 表示最後一步是跳兩層情況下爬到第i層的方法數目。f[i][1] 表示最後是一步是退一層跳兩層的情況下爬到第i層的方法數目。
2. function: f[i+1][1] = f[i][0] 最後一步是退一層跳兩層的情況下爬到第i+1層的方法數目等於從第i層情況a的數目跳兩層退一層。這裡不能考慮第i層的情況b的方法數,因為第i層情況b的數目是從第i+1層退一步得到的。f[i+2][0] = f[i][0]+f[i][1] 最後一步是退一層跳兩層的情況下爬到第i+2層的方法數目等於第i層所有情況跳兩層。
3. intialize: f[0][0]=1初始化最開始沒有爬的方法數目為1.4. answer: f[n][0]+f[n][1] 爬到第n層a、b兩種不同的方法的總和
演算法面試通關40講 45 面試題 爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1....
九章演算法 Google面試題 內積
描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...
九章演算法面試題32 小球排序
有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...