有以下几种情况:
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);
}
}
}