// 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
class Solution {
public:
int rectCover(int number) {
if(number <= 0) return 0 ;
if(number == 1) return 1 ;// 不可能有 2*0 的 接下来斐波那契 从2*1 和2*2 开始 2*1只有1种情况 即竖放
if(number == 2) return 2 ;// 2*2 可以2个竖放 也可以2个横放 所以有2种情况
int nStep2 = 1 ;
int nStep1 = 2 ;// f8 2*8的格子 竖着放 右边还有2*7(f7) 横着放 则最左2*2只能放2个横的了,剩下还剩右边2*6(f6)
for(int i = 3; i <= number; ++i) {// 即 f8 = f7 + f6 映射为斐波那契
int nTemp = nStep1 + nStep2 ;
nStep2 = nStep1 ;
nStep1 = nTemp ;
}
return nStep1 ;
}
};
矩形覆盖
最新推荐文章于 2020-12-22 11:57:06 发布