劍指offer 10 矩形覆蓋

2021-07-31 03:01:18 字數 806 閱讀 6900

題目:

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

思路:斐波那契數列的變種,為什麼是斐波那契數列的變種?

首先我們

認為小矩形為n的時候的總數是n,而那麼根據組合數學裡的加法原理,

我把此題分為兩類,第一類就是小矩形1*2放,那麼剩下的就是f(n-1)種,第二種就是小矩形2*1放,好神奇喲,那麼

剩下的就是f(n-2)種,因此加法原理告訴我們,f(n)=f(n-1)+f(n-2),可不就是斐波那契數列的變種嘛,知道這個了,可以利用遞迴或for迴圈即可求解。

遞迴版容易想到,而且**很少,但是遞迴不好的地方就是時間複雜度很大。

遞迴版:

class solution   

};

迭代版:

class solution   

return fn;

}};

突然最後發現這道題跟劍指offer-8.跳台階是一樣的,

劍指offer 10 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 對於矩形的覆蓋,2 n大小的矩形,如果第乙個小矩形豎著放,那麼右邊還有n 1個空間來安排放置小矩形 如果第乙個小矩形橫著放,那麼它的下面一定是橫著放到,而右...

劍指offer10 矩形覆蓋

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?關於分治法 分治法,分而治之。就是將原問題劃分為n個規模較小,結構與原問題類似的小問題進行處理,遞迴地解決這些問題,然後再合併求解的過程。分治法在解決的流程上分為三個步驟 ...

劍指offer 10矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?分析 類似於斐波那契數列 方法一 直接遞迴 時間複雜度o 2 n 太大 public int rectcover int number else if numbe...