給定兩個單詞 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 ...