我們可以用2x1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2x1的小矩形無重疊地覆蓋乙個2xn的大矩形,總共有多少種方法?
我們先把2xn的覆蓋方法記為f(n)。用第乙個1x2小矩陣覆蓋大矩形的最左邊時有兩個選擇,豎著放或者橫著放。當豎著放的時候,右邊還剩下2x(n-1)的區域,這種情況下的覆蓋方法記為f(n-1)。接下來考慮橫著放的情況。當1x2的小矩形橫著放在左上角的時候,左下角也必須橫著放乙個1x2的小矩形,而在右邊還剩下2x(n-2)的區域,這種情況下的覆蓋方法記為f(n-2)。
因此f(n)=f(n-1)+f(n-2)。這個公式就是著名的斐波那契公式!
def
fibonacci
(n):
if n==0:
return
1elif n ==
1or n ==2:
return n
else
:return fibonacci(n-1)
+ fibonacci(n-
2)
def
fibonacci
(n):
if n==0:
return
1if n ==1:
return
1if n ==2:
return
2 p =
1 q =
2for _ in
range
(n-2):
r = p + q
p = q
q = r
return r
微軟俱樂部程式設計題第二週第二題 將矩陣中的元素置零
給定乙個mxn矩陣,如果矩陣中有元素0,則將其所在的行和列都置為0。請使用原地演算法。原題鏈結 例如 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 設定兩個長度分別為m和n的標記陣列分別記錄行和列是否有0,根據標記陣列將某些矩陣元素置0。class soluti...
第一周訓練 E題
函式 f z zf z z 已知 f 1 f 2 f 1 f 2 的值,且對於任意 x 1x 1 有 f x 1 f x f x 1 sin x 2 f x 1 f x f x 1 sin x2 求 f n f n 的值。多組資料。資料組數 t 100 t 100 每組資料報含 3 3 個不超過 1...
暑期第一周演算法題(一)
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2 2,1 輸出 1示例 2 輸入 4 1,2 1,2 輸出 41.基礎思路 我們可以遍歷陣列中的每個數字,如果...