我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

xiaoxiao2021-02-27  189

有以下几种情况:

1.n = 0,return0;

2.n = 1,如下只有一种情况,return1;(注意2*n的大矩形指的是有两行,n为列数。当然也可以认为是有两列,有n行。)

  √   -  -  -  -  -  ...

  √   -  -  -  -  -  ...

3.n = 2,return2;

  √1  √1   -  -  -  -  -  ...

  √2  √2   -  -  -  -  -  ...

  √1  √2   -  -  -  -  -  ...

  √1  √2   -  -  -  -  -  ...

4.n = n,可以分为两种情况来讨论,

 (1)第一次用一个2*1的小矩形作为第一个格,那么剩下2*(n-1)个矩形等待填充

  √   -  -  -  -  -  -  ...

  √  -  -  -  -  -  -   ...

 (2)第一次用一个1*2的小矩形作为第一个填充的矩形,下面的那个小矩形是必然要进行填充的,那么剩下2*(n-2)个小矩形等待填充

  √  √   -  -  -  -  -  ...

  ×  ×   -  -  -  -  -  ...

所以n = n的情况总的方法为两种情况相加。 return f(n)  = f(n-1) + f(n-2);

代码:

public class Solution { public int RectCover(int target) { if(target==0) return 0; if(target==1) return 1; if(target==2) return 2; else{ return RectCover(target-1)+RectCover(target-2); } } }

转载请注明原文地址: https://www.6miu.com/read-13316.html

最新回复(0)