题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:这个题是"斐波那契数列"的题目,借此机会总结一下"斐波那契"系:
公式:f(n) = f(n-1) + f(n-2) 如果一个数列中的第n项的值为前两项的值的和,那么就是"斐波那契"了.
适用:如果第n-1种情况中的任意一种情况都可以"扩展一下"到第n种情况,并且:第n-2种情况中的任意一种情况 “扩展两下” 都可以到第n种情况,那么,就可以用最基本的“斐波那契”的公式了。。。。注意,是任意一种情况哦!
这道题中,对于n=5来说,任意的n=4中的一种情况多加1,就可以满足n=5的条件,任意一种n=3中的一种情况多加2,就可以满足n=5的条件,因此,满足“斐波那契”数列。
class Solution {
public:
int rectCover(int number) {
if(number==0) return 0;
vector<int> v;
v.push_back(1);
v.push_back(2);
for(int i=2;i<number;i++){
int result = v[i-1]+v[i-2];
v.push_back(result);
}
return v[number-1];
}
};