我們可以用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的大矩形,總共有多少種方法?思路 這個也是跳青蛙的變形 但是要自己找出當前的鋪法和以前鋪法的關係 注意到 情況一 當前塊的話可以由上一塊加上當前這一塊的豎著放 情況二 或者是 上上一塊加上兩...