劍指offer 矩形覆蓋

2021-08-21 10:19:32 字數 621 閱讀 4738

1、題目描述

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

2、思路(遞迴呼叫)

若不存在小矩形,則返回0;

若只存在乙個小矩形,則只有一種方法,返回1;

若存在兩個小矩形,則存在兩種方法,返回2;

若小矩形的數量大於2,則若乙個小矩形橫著放,則這個小矩形下面的小矩形也必須橫著放,沒有其他的選擇,所以只需計算其他n-2塊矩形的放法就行。若乙個小矩形豎著放,則需要計算其他n-1塊小矩形的放法。

3、**實現

public class solution

//如果只存在乙個小矩形,則只有一種放法

if(target == 1)

//如果只存在兩個小矩形,則有兩種放法

if(target == 2)

//否則是剩餘target-1塊(小矩形豎著放)的放法和剩餘target-2塊(小矩形橫著放)放法的和

return rectcover(target-1)+rectcover(target-2);}}

劍指offer 矩形覆蓋

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

劍指Offer 矩形覆蓋

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

劍指offer 矩形覆蓋

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?當n 8,2 8的覆蓋方法記為f 8 2 8 用 2 1 來覆蓋。在最左邊時有兩種選擇 1 豎著 右邊區域 剩 2 7,即求f 7 2 橫著 此時左下角只能橫著放,右邊區域...