劍指offer 矩形覆蓋

2021-08-31 23:42:05 字數 1217 閱讀 6101

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

當n=8,2*8的覆蓋方法記為f(8);

^ ^ ^ ^ ^ ^ ^ ^ 2*8

^ ^ ^ ^ ^ ^ ^ ^

用 # 2*1 來覆蓋。在最左邊時有兩種選擇:

#(1)豎著

# ^ ^ ^ ^ ^ ^ ^ 右邊區域 剩 2*7,即求f(7).

# ^ ^ ^ ^ ^ ^ ^

(2)橫著

# # ^ ^ ^ ^ ^ ^ 此時左下角只能橫著放,右邊區域剩 2*6,即求f(6)

^ ^ ^ ^ ^ ^ ^ ^

所以f(8)=f(7)+f(6) 即 f(n)=f(n-1)+f(n-2); f(n)其實仍為斐波那契數列

所以

f (n

)=

1 & n=1 \\ 2 & n= 2 \\ f(n-1)+f(n-2) & n>2 \end

f(n)=⎩

⎪⎨⎪⎧

​12f

(n−1

)+f(

n−2)

​n=1

n=2n

>2​

解法一 :直接用公式,但是效率低。

public

class

solution

if(target==

1||target==2)

return

rectcover

(target-1)

+rectcover

(target-2)

;}}

解法二:把已經得到的數列的中間項儲存下來。下次計算的時候先查詢。

public

class

solution;if

(target<3)

int rectcover_nminusone=2;

int rectcover_nminustwo=1;

int rectcover_n=0;

for(int i=

3;i<=target;i++

)return rectcover_n;

}}

劍指offer 矩形覆蓋

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

劍指Offer 矩形覆蓋

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

劍指offer 矩形覆蓋

1 題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?2 思路 遞迴呼叫 若不存在小矩形,則返回0 若只存在乙個小矩形,則只有一種方法,返回1 若存在兩個小矩形,則存在兩種方法,返回2 若小矩形的數量大於2,則若...