劍指offer 矩形覆蓋問題

2021-09-25 23:13:20 字數 870 閱讀 4518

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

深度優先搜尋,從(0,0)開始遍歷,判斷此格仔情況,判斷能否豎著放、橫著放,把所有情況試探一遍。

class solution 

int res=0;

dfs(number,0,0,res);

return res;

}void dfs(int n,int x,int y,int &res)

if(a[x][y]==1) //此格仔已經鋪了

if(y>=n) //該鋪下一行了 不用判斷x 因為第乙個if語句過濾了x==1的情況

//先考慮豎著鋪

if(x==0)

//判斷能不能橫著鋪

if(y+1遞迴或者動態規劃

格仔列數  1   2   n

排法數量  1   2   ?

格仔列數到排法數量的對映關係記為f

當格仔列數大於2時,我們這樣把問題拆解:f(n)=f(n-1)+f(n-2)

把排列問題分兩類,每類分兩步:

類一  ①(0,0)位置橫著放乙個,那麼(1,0)位置必然也要橫著放

②已經覆蓋了 2×2的區域,2×(n-2)的區域覆蓋方法有f(n-2)個

類二  ①(0,0)位置豎著放乙個

②已經覆蓋了 2×1的區域,2×(n-1)的區域覆蓋方法有f(n-1)個

分類相乘,分步相加, 結果為  1×f(n-1) + 1×f(n-2) 

同時結果集也是乙個斐波那契數列

class solution

return res;

}};

劍指offer 矩形覆蓋問題

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?我們採用從能夠簡單到複雜的思路思考這個問題,當n 1的時候,只有乙個2 1的矩形,所以只有一種方法,記為f 1 1 當n 2的時候,是兩個2 1的矩形,這時候具有兩種方式去...

劍指offer 矩形覆蓋

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

劍指Offer 矩形覆蓋

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