题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析:同样是典型的递归问题。如下图所示,当尝试对2×n的大矩阵进行覆盖时,如果第一块小矩阵竖着放,相当于递归的求对2×(n-1)的矩阵的覆盖方法。
如果第一个矩阵横着放,则相当于求对2×(n-2)的矩阵的覆盖方法。得递推公式f(n)=f(n-1)+f(n-2)。考虑边界条件。代码如下:
题
1 public class Solution {
2 public int RectCover(
int target) {
3 if(target==0||target==1
){
4 return 1
;
5 }
6 if(target==2
){
7 return 2
;
8 }
9 int temp1 = 1 ,temp2 = 2 ,res = 0
;
10 for(
int i = 3 ; i <=target ;i++
){
11 res = temp1+
temp2 ;
12 temp1 =
temp2 ;
13 temp2 =
res ;
14 }
15 return res ;
16 }
17 }
转载于:https://www.cnblogs.com/huntertoung/p/4753488.html