劍指Offer的學習筆記(C#篇)-- 矩形覆蓋

題目描述

咱們能夠用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

一 . 解題思路

        這個貌似就是普通的跳臺階問題。spa

二 . 代碼實現

方法一:遞歸法code

class Solution {
    public int rectCover(int number)
       {
            if(number <= 0)
            {
                return 0;
            }

            if(number == 1)
            {
                return 1;
            }

            if(number == 2)
            {
                return 2;
            }

            return rectCover(target - 1) + rectCover(target -2 );
      }
}

方法二:循環法blog

class Solution
{
    public int rectCover(int number)
    {
        // write code here
        int sum = 0;
        int a=1,b=2;
        if (number == 1)
        {
            sum = 1;
        }
        else if (number==2)
        {
            sum = 2;
        }
         else
         {
            for (int i = 3; i <=number; i++)
               {
                 sum = a + b;
                 a = b;
                 b = sum;
               }
         }
         return sum;
    }
}

 題目延伸:遞歸

若是將題目改爲1*3方塊覆蓋3*n、1*4方塊覆蓋4*n。
相應的結論應該是:
(1)1 * 3方塊 覆 蓋3*n區域:f(n) = f(n-1) + f(n - 3), (n > 3)
(2) 1 *4 方塊 覆 蓋4*n區域:f(n) = f(n-1) + f(n - 4),(n > 4)
更通常的結論,若是用1*m的方塊覆蓋m*n區域,遞推關係式爲f(n) = f(n-1) + f(n-m),(n > m)。
相關文章
相關標籤/搜索