劍指offer矩形覆蓋
阿新 • • 發佈:2018-12-03
原題目連結:劍指offer矩形覆蓋
分類
劍指offer 遞迴
題意
用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
想法
- n<=0 直接返回0了
- n==1 有一種方法
- n==2 有2種方法
- n>2時
考慮以下兩種情況
(1)第一塊磚豎著放,那麼還剩下n-1塊磚擺成2*(n-1)的矩形,有f(n-1)種方法
(2)第一塊磚橫著放,那麼要想生成矩形,第一塊磚下面也必須放一塊磚,還剩
下n-2塊磚,生成2*(n-2)的矩形,有f(n-2)種方法
合起來:f(n) = f(n-1) + f(n-2)
還是斐波那契數列
我用的遞迴寫,比較耗時,也可以用空間換時間,自己摸索
程式碼
746ms
/**
* Author: GatesMa
* Email: [email protected]
* Todo: ACM Training
* Date:2018/11/29
*/
class Solution {
public:
int rectCover(int number) {
if(number < 1) return 0;
else if(number == 1) return 1;
else if(number == 2) return 2;
else return rectCover(number - 1) + rectCover(number - 2);
}
};
* * *