【剑指 offer】三,矩形覆盖(java实现)

题目描述

我们可以用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 }

 

posted on 2015-08-23 23:00  小猿之路  阅读(406)  评论(0)    收藏  举报

导航