1. 程式人生 > >劍指offer矩形覆蓋

劍指offer矩形覆蓋

原題目連結:劍指offer矩形覆蓋


分類

劍指offer 遞迴


題意

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


想法

  • n<=0 直接返回0了
  • n==1 有一種方法
  • n==2 有2種方法
  • n>2時
    考慮以下兩種情況
    (1)第一塊磚豎著放,那麼還剩下n-1塊磚擺成2*(n-1)的矩形,有f(n-1)種方法
    (2)第一塊磚橫著放,那麼要想生成矩形,第一塊磚下面也必須放一塊磚,還剩
    下n-2塊磚,生成2*(n-2)的矩形,有f(n-2)種方法
    合起來:f(n) = f(n-1) + f(n-2)
    還是斐波那契數列

我用的遞迴寫,比較耗時,也可以用空間換時間,自己摸索

程式碼

746ms

/**
 * Author: GatesMa
 * Email: [email protected]
 * Todo: ACM Training
 * Date:2018/11/29
 */
class Solution {
public:
    int rectCover(int number) {
        if(number < 1) return 0;
        else if(number == 1) return 1;
        else if(number ==
2) return 2; else return rectCover(number - 1) + rectCover(number - 2); } }; * * *