矩形覆蓋 遞迴實現

2021-07-31 03:51:14 字數 1190 閱讀 7338

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

這個題的比較難以下手,首先找一下規律,n=1,只有一種,n=2,是乙個正方形,可以講小矩形橫著放或者豎著放:

當n=3,假如第三個小矩形恰好能夠豎直放下,這個時候,就相當於只考慮第乙個和第二個小矩形怎麼放,也就是怎麼用小矩形去填充乙個正方形,就回到了上一步,n=2時的方法,這個時候的方法數恰好就應該為f(2).

假如第三個小矩形恰好能夠橫著放下,這個時候第二個矩形也必定是橫著放的,那麼第二和第三個小矩形就確定了,只需要考慮第乙個小矩形的擺放方法,也就是f(1).

那麼f(3)=f(2)+f(1)。這個時候我們還不能完全看出規律。假如n很大的時候,我們只考慮n,n-1,n-2,這三個小矩形的擺放方式。如下圖所示:

按照n=3 時候的思考,假如擺放第n個小矩形只能豎直擺放,那麼恰好是下圖這種情況:

這時,最後乙個小矩形是固定的,只要考慮前面n-1個小矩形的擺放方法,就是f(n)。

接著,假如最後乙個小矩形只能橫著擺放,也就是下圖所示:

這個時候,最後兩個小矩形的位置固定的,就只需要考慮前n-2個小矩形的擺放方式,也就是f(2).

綜上分析:

f(n) = f(n-1) + f(n-2). (n >= 3)

f(2) = 2;

f(1) = 1

f(0) = 0;

**如下:

public

class solution

if(target == 1)

if(target == 2)

return rectcover(target - 1) + rectcover(target -2 );}}

遞迴(迭代) 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?題目分析 依舊是斐波那契數列,2 n的大矩形,和n個2 1的小矩形,其中target 2為大矩陣的大小。有以下幾種情形 1.target 0 大矩形為 2 0,直...

遞迴四 矩形覆蓋

題目 矩形覆蓋 描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?解決方案 思路 舉例說明 n 1時 乙個2 1的小矩形 2 1的大矩形 1種方法 直接填充 n 2時 2個2 1小矩形 2 2的大矩形 2種方法 豎著...

《劍指Offer》遞迴和迴圈 矩形覆蓋

時間限制 1秒 空間限制 32768k 熱度指數 228315 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 根據找規律得 n 1時,1種 n 2時,2種 n 3時,3種 n 4時,5種 觀察得 n 1時,1種 ...