演算法 遞迴的練習

2021-10-23 19:46:38 字數 2019 閱讀 1304

leecode面試題16.11——跳水板

leecode1137——第n個泰波那契數

leecode面試題 08.05. ——遞迴乘法

leecode698. ——劃分為k個相等的子集

注意1:處理兩個特殊情況:k值小於等於0、shorter值等於longer的情況。

k小於等於0這個特殊情況很容易想到,但shorter=longer的情況是真的沒想到,測試用例沒通過才想到這種情況,當兩個值相等時,這個時候輸出陣列就乙個值就是shorter*k,要是還是按照通用方法,最後會輸出k個一樣的值。如圖所示:

注意2:根據所給的輸出示例,給出題目要求的輸出,本題的要求就是shorter這個值的個數從大到小去計算。

比如說這個測試用例,我得到的值是對著,但答案的順序和要求的有出入,因此觀察所給的輸入輸出示例則能得到要求的值。

;這個名字硬生生的把tribonacci翻譯成了中式英語

遞迴肯定是超時了,因為重複的計算太多了,所以需要用到遞迴的優化:考慮儲存重複計算值或者考慮自下而上的遞推方法。

這個題有意思了,剛剛複習的小青蛙跳台階的優化方法遞推方法剛好派上用場。

class

solution

return sum123;}}

;

class

solution

: def tribonacci

(self, n:

int)

->

int:

a, b, c =0,

1,1for i in range

(n):

a, b, c = b, c, a+b+c

return a

class

solution

};

函式1實現對原陣列的處理,包括計算這個要搜尋的總和target=陣列總和/k,將陣列元素用雜湊表進行儲存,方便後邊用dfs進行搜尋,還有就是特殊情況的處理,包括target不存在的情況和陣列最大值大於這個target的情況,都是返回false;

函式2實現dfs深度優先搜尋:實現尋找k個target是否能在陣列中組合存在。難理解的是核心dfs部分,用了乙個for迴圈取遍歷了所有可能的情況。

class

solution

int target = sum/k;

x = target;

if(sum%k !=

0|| maxnum > target)

return

false

;return

dfs(hashmap, k,0)

;//dfs搜尋x個target看是否存在

}//dfs尋找knew個target,newtarget是上乙個子集剩餘的需要尋找的元素

bool

dfs(unordered_map<

int,

int>

&hashmap,

int knew,

int newtarget)

else

}//dfs搜尋target,從陣列中最大的值開始搜尋

for(

int i=newtarget;i>

0;i--)}

return

false;}

};

菜鳥每天練習 之 遞迴演算法

遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫函式 或過程 來表示問題的解。遞迴過程一般通過函式或子過程來實現。遞迴演算法 在函式或子過程的內部,直接或者間接地呼叫自己的演算法。遞迴演算法解決問題的特點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時,必須有乙個明確的遞...

遞迴演算法練習 解壓縮

現在有一種字串的壓縮規則是這樣的 k string 表示string連續出現k次 0 k 1000 例如 s ef3 a 2 bc gh 解壓後的字串為 efaaabcbcgh 這種壓縮也可以巢狀,s 3 a2 c 解壓後為 accaccacc 輸入乙個字串s,請輸出乙個解壓後的字串。輸入都是嚴格合...

演算法設計與應用練習 遞迴

1.十進位制轉二進位制 2.斐波那契數列 3.翻牌問題 4.打靶問題 5.八皇后問題 include stdio.h include include include include include stdlib.h 1.輸入乙個自然數 90000 分別用遞迴法和非遞迴法求其二進位制表示.演算法設計思...