每日一道小演算法(五) 遞迴 矩形的覆蓋

2021-10-02 02:35:43 字數 814 閱讀 3412

前言:

日常閒聊,哈哈,這道題是劍指offer上面的一道題,這道題很經典,看了**你會覺得很簡單,但是看這道題還是沒有什麼思路的,重要的是找思路,多舉個例子測試一下,就會明白很多。好了不廢話了,開撕,嗖 pa!!!

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

我們採用從能夠簡單到複雜的思路思考這個問題,當n=1的時候,只有乙個21的矩形,所以只有一種方法,記為f(1)=1;當n=2的時候,是兩個21的矩形,這時候具有兩種方式去覆蓋這個矩形了(這時候應該是乙個正方形),一種是豎著放,一種是橫著放,所以有兩種方法,記為f(2)=2;

當n=3的時候,仍然只能採用橫著放或者豎著放的方式去覆蓋這個矩形,我們仍首先考慮使用豎著放的方式,當豎著放的時候,由於已經覆蓋了左邊(假設是從左邊開始覆蓋的,從右邊的覆蓋的效果是一樣的)乙個21的矩形,所以還有2個21的矩形,而這種情況我們已經在n=2的時候計算出來了,就是f(2);接下來我們考慮橫著放的情況,由於是橫著放,在水平方向已經覆蓋了乙個21的矩形,所以要想覆蓋這由3個21組成的矩形,只能在水平方向的覆蓋的那個矩形下面繼續覆蓋乙個,那麼只剩下乙個2*1的矩形了,這也通過前面的分析計算出來了,就是f(1)。綜合以上分析,當n=3的時候,覆蓋的方法是f(3)=f(1)+f(2)。

多試幾次,還是這個規律,這不是跟斐波那契很像嘛,哈哈哈,找到解決辦法了,於是**如下。

public

class

solution

else

if(target ==2)

else

}}

每日一道演算法題

no.1 設指標變數fron t表示鏈式佇列的隊頭指標,指標變數rear表示鏈式佇列的隊尾指標,指標變數s指向將要入佇列的結點x,則入佇列的操作序列為 a.front next s front s b.s next rear rear s crear next s rear s d.s next f...

每日一道演算法題

no.1 若有 18 個元素的有序表存放在一維陣列 a 19 中,第乙個元素放 a 1 中,現進行二分查詢,則查詢 a 3 的比較序列的下標依次為 a.1,2,3 b.9,5,2,3 c.9,5,3 d.9,4,2,3 答案 d.第一次查詢,隊首為下標1,隊尾下標18,所以是 1 18 2 9 第二...

每日一道領扣演算法

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...