劍指offer 10 矩形覆蓋

2022-07-30 23:33:17 字數 1139 閱讀 7431

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

(參考牛客網daniel lee 分享的)用歸納法歸納如下,

(1)當 n < 1時,顯然不需要用2*1塊覆蓋,按照題目提示應該返回 0。

(2)當 n = 1時,只存在一種情況。

(3)當 n = 2時,存在兩種情況。

(4)當 n = 3時,明顯感覺到如果沒有章法,思維難度比之前提公升挺多的。

... 嘗試歸納,本質上 n 覆蓋方法種類都是對 n - 1 時的擴充套件。

可以明確,n 時必定有 n-1時原來方式與2*1的方塊結合。也就是說, f(n) = f(n-1) + ?(暫時無法判斷)。

(4)如果我們現在歸納 n = 4,應該是什麼形式?

4.1)保持原來n = 3時內容,並擴充套件乙個 2*1 方塊,形式分別為 「| | | |」、「= | |」、「| = |」

4.2)新增加的21 方塊與臨近的21方塊組成 2*2結構,然後可以變形成 「=」。於是 n = 4在原來n = 3基礎上增加了"| | ="、「= =」。

再自己看看這多出來的兩種形式,是不是只比n = 2多了「=」。其實這就是關鍵點所在...因為,只要21或12有相同的兩個時,就會組成2*2形式,於是就又可以變形了。

所以,自然而然可以得出規律: f(n) = f(n-1) + f(n-2), (n > 2)。

拓展

如果看了這一套理論還存在疑惑。可以嘗試將題目改成13方塊覆蓋3n、14方塊覆蓋4n。

相應的結論應該是:

(1)1 * 3方塊 覆 蓋3*n區域:f(n) = f(n-1) + f(n - 3), (n > 3)

(2) 1 4 方塊 覆 蓋4n區域:f(n) = f(n-1) + f(n - 4),(n > 4)

更一般的結論,如果用1m的方塊覆蓋mn區域,遞推關係式為f(n) = f(n-1) + f(n-m),(n > m)。

function rectcover(number)

return f;

}

劍指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個規模較小,結構與原問題類似的小問題進行處理,遞迴地解決這些問題,然後再合併求解的過程。分治法在解決的流程上分為三個步驟 ...