矩形覆盖

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

}
};

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

posted @ 2020-05-21 20:15  转瞬即逝1995  阅读(111)  评论(0编辑  收藏  举报