原创博文,转载请注明出处!
0.简介
1.题目
# 用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
2.思路
# 2*1的矩阵覆盖2*8的矩阵的方法f(8):用第一个1*2矩阵覆盖2*8矩阵的最左边时有竖着或横着两种方法。
当1*2矩阵竖着放时,2*8矩阵右边剩余2*7的区域,覆盖2*7区域的方法记为f(7);
当1*2矩阵横着放时,2*8左上角放一个1*2的矩阵,则2*8左下角必须放一个1*2的矩阵,2*8右边剩余2*6的区域,覆盖2*6区域的方法记为f(6)。
结论:用1*2的矩阵覆盖2*8的矩阵的方法归纳为f(8) = f(7)+f(6)
3.code
# 返回值:用1*2矩阵无重叠覆盖2*n的矩阵的方法数
# 参 数:矩阵的长度n
class Solution {
public:
int rectCover(int number) {
if(number<=0)
return 0;
if(number<3)
return number; int a=1;
int b=2;
int c=0;
for(int i=3;i<=number;++i){
c=a+b;
a=b;
b=c;
}
return c;
}
};