Description:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
Notes:
- 时间限制:1秒
- 空间限制:32768K
解题思路:首先已经明确了大矩阵为2n,小矩阵为21,因此,每一次我们用小矩阵去覆盖大矩阵只有两种情况,用横的小矩阵去覆盖大矩阵的一行或者用两个竖的小矩阵去覆盖大矩阵的两行(如果使用一个竖的那么必然需要添加另外一个竖直的);所以,解决这个问题考虑使用递归来解决,每一次尝试横或竖的放置后,相应的扣去1和2行,结果为F(target - 1) + F(target - 2);
Java
public class Solution {
public int RectCover(int target) {
if (target <= 1) return target;
int cnt = 0;
if (target - 1 > 0) cnt += RectCover(target - 1);
else if (target - 1 == 0) cnt += 1;
if (target - 2 > 0) cnt += RectCover(target - 2);
else if (target - 2 == 0) cnt += 1;
return cnt;
}
}
运行结果:
运行时间:707ms
占用内存:9280k