劍指Offer 10 矩形覆蓋

2022-09-05 10:12:06 字數 579 閱讀 4538

題目描述:

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

解題思路:

我們可以以2 x 8的矩形為例。

先把2x8的覆蓋方法記為f(8),用1x2的小矩形去覆蓋時,有兩種選擇:橫著放或者豎著放。當豎著放時,右邊還剩下2x7的區域。很明顯這種情況下覆蓋方法為f(7)。當橫著放時,1x2的矩形放在左上角,其下方區域只能也橫著放乙個矩形,此時右邊區域值剩下2x6的區域,這種情況下覆蓋方法為f(6)。所以可以得到:f(8)=f(7)+f(6),不難看出這仍然是斐波那契數列。

特殊情況:f(1)=1,f(2)=2

程式設計實現(j**a):

public int rectcover(int target) 

return res;

}

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