剑指Offer--矩形覆盖--java

题目描述:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

算法思想:
经检验为斐波那契数列
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2)
这个数列从第3项开始,每一项都等于前两项之和。
显然这是一个线性递推数列。

解题思路:
如果输入前两项返回分别为1,2,从第三项开始,可以设置三个变量a,b,c。c存放a,b的和,a存放b的值,b存放c的值。

代码如下:
public class Solution {
public int RectCover(int target) {
int a=1;
int b=2;
int c=0;
if(target == 1 || targe t== 2){
return target;
}else{
for(int i=3;i<=target;i++){
c=a+b;
a=b;
b=c;
}
}
return c;
}
}
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43689040/article/details/87606151