题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
乍一看、、唔、、动态规划
再一看、、唔、、怎么动态,怎么规划、、
隐隐觉得跟剑指offer前边的青蛙跳台阶有关系,然鹅、只有直觉是木有用的、找了半天没有找到怎么划分子问题,怎么找动态转移方程。
然后一翻大家的解法,唉,还是我太菜,算法路上任重道远啊、
【解题思路】
我们来分析这个变量n,如果<=0,那肯定要返回0的
如果n=1,也很肯定只有1种方法
如果n=2,那也是肉眼可见的只有2种方法,请自行画图理解
重点是当n>2时,第一个小矩形只有两种方法,下图所示,当第一个矩形如图1放置时,问题就变为f(n-2),当第一个矩形如图2放置时,问题就变为f(n-1)
* | * | |||
* | ||||
* |
##是不是很简单,对,然而我这个猪脑依然是没想出来##
public class Solution { public int RectCover(int target) { if(target <= 0) return 0; if(target == 1){ return 1; } if(target == 2){ return 2; }else{ return RectCover((target-1))+RectCover(target-2); } } }