劍指offer:矩形覆蓋
阿新 • • 發佈:2018-12-10
試題:
我們可以用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; } };