题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路:
我们记n个2*1小矩形无重叠地覆盖一个2*n的大矩阵的方法数为f[n],
当n=0, f[0] = 0
当n=1, f[1] = 1
当n=2,我们可以选择横放或者竖放,当竖放时,一个2*1的小矩形刚好覆盖大矩形的一列,还剩一个2*(n-1)的矩形需要覆盖, 当横放时,接下来也只能横放。f[2] = f[2 - 1] + 1
当n=3,当竖放时,我们有f[3 - 1]种方法,当横放时,有f[3 - 2]种。
于是f[n] = f[n - 1] + f[n -2]
1 class Solution {
2 public:
3 int rectCover(int number) {
4 if (number <= 2) {
5 return number;
6 }
7 vector<int> v(number + 1, 0);
8 v[1] = 1;
9 v[2] = 2;
10 for (int i = 3; i <= number; i++) {
11 v[i] = v[i - 1] + v[i - 2];
12 }
13 return v[number];
14 }
15 };
越努力,越幸运
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。