题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
题目分析
如上图为2*n大矩形,用第一个2*1小矩形覆盖它时有两种选择:
1、竖着放,此时还剩下2*(n-1)的矩形,此时记为f(n-1);
2、横着放在左上角,那么也必须在左下角横着放一个小矩形,还剩2*(n-2)的矩形,此时记为f(n-2)。
所以 f(n)=f(n-1)+f(n-2),为斐波那契数列。
class Solution {
public:
int rectCover(int number) {
if(number <= 2)
return number;
int f1 = 1, f2 = 2;
int result;
for(int i=3; i<=number; i++){
result = f1 + f2;
f1 = f2;
f2 = result;
}
return result;
}
};