题目
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
知识点
斐波那契数列,递归
思路
方一、找规律,发现第2项及之后和斐波那契数列一样,所以可以直接用数组将前两项相加得到本项。
方二、递归实现:
当n=1时,只能竖着覆盖,为1;
当n=2时,既可以横着覆盖,也可以竖着覆盖,为2;
当n=N时,只需要考虑n-1和n-2如何覆盖即可。
代码
public class Solution {
public int rectCover(int target) {
int[] array = new int[target+3];//必须+3,不然越界(因为下面array我有固定数组0,1,2位置的值。
array[0]=0;
array[1]=1;
array[2]=2;
for(int i=3;i<=target;i++){
array[i] = array[i-1]+array[i-2];
}
return array[target];
}
}
public class Solution {
public int rectCover(int target) {
if(target <=2){
return target;
}else{
return rectCover(target-1) + rectCover(target-2);
}
}
}