题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路:
假设现在n为8,如下图所示
当第一个矩形横着放置时,还剩下2*6区域,即f(6)
当地一个竖着放置时,还剩下2*7区域,即f(7)
故,f(8)=f(7)+f(6)
即此题仍然是斐波那契数列。
class Solution {
public:
int rectCover(int number) {
if(number<=0) return 0;
int last=1, recent=2; //n=1时为1,n为2时2
while(number-->1){
recent+=last;
last=recent-last;
}
return last;
}
};