劍指offer 矩形覆蓋問題

2021-07-15 21:25:09 字數 643 閱讀 1974

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

我們採用從能夠簡單到複雜的思路思考這個問題,當n=1的時候,只有乙個2*1的矩形,所以只有一種方法,記為f(1)=1;當n=2的時候,是兩個2*1的矩形,這時候具有兩種方式去覆蓋這個矩形了(這時候應該是乙個正方形),一種是豎著放,一種是橫著放,所以有兩種方法,記為f(2)=2;

當n=3的時候,仍然只能採用橫著放或者豎著放的方式去覆蓋這個矩形,我們仍首先考慮使用豎著放的方式,當豎著放的時候,由於已經覆蓋了左邊(假設是從左邊開始覆蓋的,從右邊的覆蓋的效果是一樣的)乙個2*1的矩形,所以還有2個2*1的矩形,而這種情況我們已經在n=2的時候計算出來了,就是f(2);接下來我們考慮橫著放的情況,由於是橫著放,在水平方向已經覆蓋了乙個2*1的矩形,所以要想覆蓋這由3個2*1組成的矩形,只能在水平方向的覆蓋的那個矩形下面繼續覆蓋乙個,那麼只剩下乙個2*1的矩形了,這也通過前面的分析計算出來了,就是f(1)。綜合以上分析,當n=3的時候,覆蓋的方法是f(3)=f(1)+f(2)。

public

class solution

else

if(target ==2)

else

}}

劍指offer 矩形覆蓋問題

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?深度優先搜尋,從 0,0 開始遍歷,判斷此格仔情況,判斷能否豎著放 橫著放,把所有情況試探一遍。class solution int res 0 dfs number,0,...

劍指offer 矩形覆蓋

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?觀察題目中的矩形,2 n的,是個長條形。本來腦中想象的是複雜的華容道,但是既然只是簡單的長條形,那麼依然逆向分析。既然是長條形的,那麼從後向前,最後乙個矩形2 2的,只有兩...

劍指Offer 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 這個也是跳青蛙的變形 但是要自己找出當前的鋪法和以前鋪法的關係 注意到 情況一 當前塊的話可以由上一塊加上當前這一塊的豎著放 情況二 或者是 上上一塊加上兩...