首页 > 其他 > 详细

矩形覆盖

时间:2020-05-21 20:43:08      阅读:55      评论:0      收藏:0      [点我收藏+]
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
 
比如n=3时,2*3的矩形块有3种覆盖方法:
技术分享图片

 

首先给我想到的是递归的思想:

然后就是找规律 

f(0) = 0 ; f(1) = 1; f(2) = 2; f(3) = 3;刚好f(3) = f(1)+f(2);大胆猜测了一波f(n)= f(n-1)+f(n-2); 啊哈哈猜对了

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 if(number == 3)
    return 3;
  else
    return (rectCover(number -1)+rectCover(number -2));
  }
};

斐波那契数列:

class Solution {
public:
int rectCover(int number) {

 

   if(number == 0)

    return 0;

   if(number ==1)

    return 1;

   if(number == 2)

    return 2;

   int a=1,b=2,c=0;

    for(int i =3;i<=n;i++){

    c=a+b;

    a =b;

    b =c;

}

    return c;

}
};

 用递归花费的时间是真的多

矩形覆盖

原文:https://www.cnblogs.com/yl1995/p/12933368.html

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