1 题目
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,
总共有多少种方法?
2 思路
当只有n=1时,有F(1)=1;
当n=2时,两个矩形可都竖着放,或者都横着放,F(2)=2;
当n=3时,第一块竖着放时,有F(2)种方法;第一块横着放时,有F(1)中方法;因此,F(3)=F(2)+F(1)
当有2*n时,第一块竖着放时,有F(n-1)种方法;第一块横着放时,有F(n-2)中方法;F(n)=F(n-1)+F(n-2)
因此又转回了Fabinna级数问题
3 代码实现
class Solution {
public:
int rectCover(int number) {
if(number<=2)
return number;
int first=1,second=2,target;
while(number-->2){
target=first+second;
first=second;
second=target;
}
return target;
}
};