題目描述我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?這個題目我想到兩種思路,一種是斐波那契數列,另一種是排列組合其實仔細觀察這道題我們會發現,2*3的矩形塊的3種覆蓋方法可以寫為:比如n=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個規模較小,結構與原問題類似的小問題進行處理,遞迴地解決這些問題,然後再合併求解的過程。分治法在解決的流程上分為三個步驟 ...