一、题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
二、解题思路
使用归纳法分析有以下情况:
当n<=0时:直接返回0
当n=1时:只要一种解法" | ",返回1
当n=2时:有两种解法"="和 "| | "
当n=3时:有 "= |" "| =" "| | |"
同理当n=4的时候只要在n=3的基础上加一个2*1矩形可得 "= | |" "| = |" "| | | |"
"= =" "| | ="
所以可以推出递推关系式为f(n) = f(n-1) + f(n-m),(n > m)。
public class Solution { public int RectCover(int target) { if(target==0){ return 0; } else if(target==1){ return 1; } else if(target==2){ return 2; }else{ return RectCover(target-1)+RectCover(target-2); } } }