题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
比如n=3时,2*3的矩形块有3种覆盖方法:
分析:我们对算法模型做些简化,我们知道,只可以放置两种类型的小矩形,一种是竖着放的2*1矩形,另一种是两块横着放的2*1矩形上下放置形成的2*2正方形,而题目要放置的是2*n的大矩形。
要放置的是2*n的大矩形,①我们要么竖着放的2*1矩形,②要么横着放两块(为什么不竖着放呢)的2*1矩形上下放置形成的2*2正方形。只有这两种放法。
注意:为什么不计算两个竖起来放的2*1矩形形成的2*2正方形呢?
因为已经计算过了。手动滑稽~~两个竖起来放的2*1矩形形成的2*2正方形我们在①种已经计算过了。
简化算法:一条线段,每次要么画1cm。要么每次画2cm。问:画n cm长的线段有多少种方法。
道理同青蛙跳台阶。实际就是一个斐波那契数列。
代码:
public class Solution {
public int RectCover(int target) {
if(target<=2){
return target;
}
int a=1;
int b=2;
for(int i=3;i<=target;i++){
b=a+b;
a=b-a;
}
return b;
}
}