题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路
当 n = k 时,如果用21的小矩形横着去覆盖大矩形的左上角时
则大矩形的左下角无疑也只能用21的小矩形横着去覆盖,而大矩形剩下的2*(k-2)未被覆盖区域则可以用递归算法解决;
同理,如果用21的小矩形竖着去覆盖大矩形的左上角时,则大矩形剩下的2(k-1)未被覆盖区域也可以用递归算法解决。
实现
class Solution {
public:
int rectCover(int number) {
if(number <= 2){
return number;
}
else{
int num01 = 1;
int num02 = 2;
int num03;
int index = 2;
while(true){
index++;
num03 = num01 + num02;
if(index >= number){
break;
}
else{
num01 = num02;
num02 = num03;
}
}
return num03;
}
}
};
运行结果
运行时间:3ms
占用内存:476k