题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?
比如n=3时,23的矩形块有3种覆盖方法:
思路: 所得递推公式和跳台阶问题一样,代码也相同
C++
class Solution {
public:
int rectCover(int number) {
if (number == 1) return 1;
if (number == 2) return 2;
vector<int>f{0, 1, 2}; //0为占位,1 2 为初始条件,这里与斐波那契的代码不同,见下链接
int temp;
for (int i = 3; i <= number; i++)
{
temp = f[i - 1] + f[i - 2]; //递推表达式
f.push_back(temp);
}
return f[number];
}
};
Python
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number < 1:
return 0
if number == 1:
return 1
if number == 2:
return 2
#return self.rectCover(number - 1) + self.rectCover(number - 2) #递归复杂度太大
temp = 0
fir = 1
sec = 2
for i in range(1,number - 1):
temp = fir + sec
fir = sec
sec = temp
return temp
类似题目如下: