遞迴備忘錄法 leetcode 72編輯距離

2021-10-02 18:26:48 字數 1045 閱讀 5883

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。

你可以對乙個單詞進行如下三種操作:

插入乙個字元

刪除乙個字元

替換乙個字元

示例 1:

輸入: word1 = 「horse」, word2 = 「ros」

輸出: 3

解釋:horse -> rorse (將 『h』 替換為 『r』)

rorse -> rose (刪除 『r』)

rose -> ros (刪除 『e』)

示例 2:

輸入: word1 = 「intention」, word2 = 「execution」

輸出: 5

解釋:intention -> inention (刪除 『t』)

inention -> enention (將 『i』 替換為 『e』)

enention -> exention (將 『n』 替換為 『x』)

exention -> exection (將 『n』 替換為 『c』)

exection -> execution (插入 『u』)

思路: 遞迴加備忘錄法自頂向下 效率和 動態規劃自底向上差不了多少。

往往動態規劃不是那麼容易想到。熟悉這個方法還是什麼重要的。

class

solution

return

defind

(dp,word1.

length()

-1,word2.

length()

-1,word1,word2);}

// 尋找當前s 前0-i, p 0-j 轉化的最小長度

public

intdefind

(int

dp,

int i,

int j,string w1,string w2)

else

dp[i]

[j]= ans;

return ans;

}}

Leetcode刷題備忘錄(一)

開始寫這個,也算是督促自己多寫 多寫一些演算法,不要分心做其他事,另外也是方便自己以後來查詢吧。題目出自leetcode,有興趣的朋友可以去那裡開始刷題之旅,都是非常有趣的題目。題目大意如下所示 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的...

動態規劃 備忘錄方法 遞迴方法

動態規劃的基本思想是,將原問題拆分為若干子問題,自底向上的求解。其總是充分利用重疊子問題,即通過每個子問題只解一次,把解儲存在乙個表中,巧妙的避免了子問題的重複求解。遞迴方法,採用的是自頂向下的思想,拆分為若干子問題,但是造成了子問題的重複求解。備忘錄方法,採用的也是自頂向下的思想,但是該方法維護了...

硬幣找零 遞迴備忘錄解法

問題很常見吧!就是給定乙個錢數n,然後給定乙個k種硬幣 然後輸入硬幣的面值,然後求出最少的硬幣來湊出這個錢數 例如 11塊 有三種硬幣 1 2 5 那麼最少數就是 3 兩個5和乙個1 include include include include using namespace std intdp ...