题目名称:矩形覆盖
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
从题目描述可知,这也是一道斐波那契数列的题目:f(n) = f(n-1)+f(n-2);
/*
* 题目描述
* 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
* 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,
* 总共有多少种方法?
* 下面的方法中的target值就是这里的n值
*/
//可以使用斐波那契数列的方法解决 f(n) = f(n-1)+f(n-2)
public int RectCover(int target){
//target=1时,有一种方法
int f1=1;
//target=2时,有两种方法
int f2 = 2;
int fn = 0;//n指3,4,....n
if(target<=2){
return target;
}
for(int i=3;i<=target;i++){
fn = f1+f2;
f1 = f2;
f2 = fn;
}
return fn;
}