问题
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。
请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,
总共有多少种方法?
分析
这种问题上来找不到规律,是啥啊?
可以先画几张图,找找规律?
就相当于解数学题,肯定是有什么规律的?
n=1
1种情况n=2
2种情况
- ·
n=3
n=4
总结上述规律,可以 发现 n的摆法和其前两次d的n-1
与n-2
摆法有关,也就是F(n)=F(n-1)+F(n-2)
这就是菲薄纳妾数列啊
代码实现(递归版)
public int RectCover(int target) {
if(target<1)
return 0;
if(target==1){
return 1;
}
if(target==2){
return 2;
}
return RectCover(target-1)+RectCover(target-2);
}
代码实现(循环版)
public int RectCover2(int target){
if(target<1){
return 0;
}
if(target==1){
return 1;
}
if(target==2){
return 2;
}
int preNum = 2;
int prepreNum = 1;
int result = 0;
for(int i=3;i<=target;i++){
result = preNum+prepreNum;
prepreNum=preNum;
preNum=result;
}
return result;
}