劍指offer 10 矩形覆蓋

2022-01-29 05:53:42 字數 1213 閱讀 9484

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

比如n=3時,2*3的矩形塊有3種覆蓋方法:

這個題目我想到兩種思路,一種是斐波那契數列,另一種是排列組合其實仔細觀察這道題我們會發現,2*3的矩形塊的3種覆蓋方法可以寫為:

\[1+1+1=3

\]\[1+2=3

\]\[2+1=3

\]仔細觀察大家會發現,3可以由m個2與n個1加和而成(其中2*m+n=3),當3全部由1組成的時候只有一種情況,而當3由1和2組成的時候有兩種情況,這種情況就是由排列組合算出,公式如下:

\[rectcover=^\over^*a_^}}

\]\[^\over^*a_^}}=1

\]\[^\over^*a_^}}=4

\]\[^\over^*a_^}}=3

\]所以一共有1+4+3=8種情況,**如下:

function rectcover(number)

let res = [1];

let n=1;

for(let i=1; i<=number; i++)

let index = 0;

let sum = 0;

while((number - 2*index) >= 0)

return sum;

}

這種思路其實和前兩道題目大體相似,不太明白的可以去前兩道題目看一下,這裡只給出**:

function rectcover(number) 

let pre1 = 2; // n 最後使用一塊,剩下 n-1 塊的寫法

let pre2 = 1; // n 最後使用兩塊,剩下 n-2 塊的寫法

for (let i = 3; i <= number; i++)

return pre1; //相對於 n+1 塊來說,第 n 種的方法

}

劍指offer 10 矩形覆蓋

題目 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 斐波那契數列的變種,為什麼是斐波那契數列的變種?首先我們 認為小矩形為n的時候的總數是n,而那麼根據組合數學裡的加法原理,我把此題分為兩類,第一類就是小矩形1 ...

劍指offer 10 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 對於矩形的覆蓋,2 n大小的矩形,如果第乙個小矩形豎著放,那麼右邊還有n 1個空間來安排放置小矩形 如果第乙個小矩形橫著放,那麼它的下面一定是橫著放到,而右...

劍指offer10 矩形覆蓋

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?關於分治法 分治法,分而治之。就是將原問題劃分為n個規模較小,結構與原問題類似的小問題進行處理,遞迴地解決這些問題,然後再合併求解的過程。分治法在解決的流程上分為三個步驟 ...