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

劍指offer:矩形覆蓋

試題:

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

程式碼:

同樣是總結出規律,然後使用迭代,當n=1時,只有一種方法;當n=2時,只有兩種方法;當n=3時,只有三種方法。從n=3往回推,假設所有矩形已經填滿,這是時減去一個矩形就得到n-1的情況;減去兩個矩形就是n-2的情形;當減去3個的矩形時就會發現,從n-3情況下無論如何填充,其下一步都是n-1或者n-2情況。也就是說n-3的情形已經被包含在n-1或n-2當中了。

class Solution {
public:
    int rectCover(int number) {
        if(number==0) return 0;
        int first = 1;
        int second = 2;
        while(number-->1){
            second = first + second;
            first = second - first;
        }
        return first;
    }
};