题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
/*
1.如果n=1,只有一种方法。
2.如果n=2,两种方法,一种是横着,一种是竖着。
3.当 n>2时,把覆盖2*n区域的方法数目看成n的函数f(n)。用第一个2*1的矩形去覆盖大矩形时,有两种选择:一是竖着放,二是横着放。
当竖着放的时候,右边还剩2*(n-1)的区域,此时方法数目为右边还剩下2*(n-1)的区域的方法数目,即为f(n-1)。
当横着放的时候,小矩形横着放的下面(或者上面)必须横着放一个小矩形,右边还剩2*(n-2)的区域,此时方法数目为右边还剩下2*(n-2)的区域的方法数目,即为f(n-2)。
4.斐波那契数列:1 2 3 5 8 ...
*/
class Solution {
public:
int rectCover(int number) {
int result[2]={0,1};
if (number < 2)
return result[number];
long long fibone = 0;
long long fibtwo = 1;
long long fibn =0;
for (int i =1;i<= number;i++)
{
fibn = fibone + fibtwo;
fibone = fibtwo;
fibtwo = fibn;
}
return fibn;
}
};