题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
题目分析:斐波那契数列的变形.
当number=0,返回0;当number=1,返回1;当number=2,返回2.
当number>3时,分两种情况:
1)首先横着放,即第一次摆放一块 12 的小矩阵,则它下方的12小矩阵也固定了,则摆放方法总共为f(target - 2)
2)首先竖着放,即第一次摆放一块 2*1 的小矩阵,则摆放方法总共为f(target - 1)
则:摆放方式总共有f(target-1)+f(target-2)种.即斐波那契数列.
class Solution:
def rectCover(self, number):
if number == 0:
return 0
elif number == 1:
return 1
elif number == 2:
return 2
else:
temp = 3
init = []
init.extend([0, 1, 2])
while temp <= number:
init.append(init[temp-1] + init[temp-2])
temp += 1
return init[-1]
c++:
class Solution {
public:
int rectCover(int number) {
if(number==0) return 0;
else if(number==1) return 1;
else if(number==2) return 2;
else{
int temp = 3;
vector<int> init={0,1,2};
while(temp<=number){
init.push_back(init[temp-1]+init[temp-2]);
temp++;
}
return init.back();
}
}
};
来源:CSDN
作者:cy求求你让我过吧
链接:https://blog.csdn.net/qq_26496077/article/details/103608516