题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
这道题还是跳台阶的思路,斐波那契数列的变体
如果n<=2,则有n种方法。
n>2的话,有两种情况:
- 最左边竖放1个2*n的矩形,剩下的大矩形长度变为n-1
- 最左边平行横放两个矩形,剩下的大矩形长度变为n-2
所以 规模为n的方法数 = 规模为n-1的方法数 + 规模为n-2的方法数
public class Solution {
public int RectCover(int target) {
if(target<=2) {
return target;
}
int[] a={1,2};
int i=2;
do {
a[i%2]=a[0]+a[1];
}while(++i<target);
return a[(i-1)%2];
}
}