首页 > 其他 > 详细

剑指offer 矩形覆盖

时间:2019-07-23 16:13:17      阅读:68      评论:0      收藏:0      [点我收藏+]

题目描述

我们可以用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 };

 

剑指offer 矩形覆盖

原文:https://www.cnblogs.com/qinduanyinghua/p/11232117.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!