描述:
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,从同一个方向看总共有多少种不同的方法?
输入描述:
21的小矩形的总个数n
返回值描述:
覆盖一个2*n的大矩形总共有多少种不同的方法(从同一个方向看)
比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看):
思路:
自己画图就可以看出来就是和跳台阶一样的斐波那契数列
f[n] = f[n-1] + f[n-2],初始条件f[1] = 1, f[2] =2
代码
public class Solution {
public int rectCover(int target) {
if(target == 0) {
return 0;
}
if(target == 1) {
return 1;
}
if(target == 2) {
return 2;
}
int fibMinOne = 2;
int fibMinTwo = 1;
int res = 0;
for(int i = 3; i <= target; i++){
res = fibMinOne + fibMinTwo;
fibMinTwo = fibMinOne;
fibMinOne = res;
}
return res;
}
}