我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析思路:
因为小矩形可以横放和竖放,因此最小的单元应该是2*1,或者2*2
因此f(n)=f(n-1)+f(n-2)
转化为斐波那契数列
/**
* 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
*/
public int RectCover(int target) {
if (target < 0)
return 0;
if(target==0)
return 1;
if (target <= 2)
return target;
int[] record = new int[target];
record[0] = 1;
record[1] = 2;
for (int i = 2; i < target; i++) {
record[i] = record[i - 2] + record[i - 1];
}
return record[target - 1];
}