動態規劃令人迷茫?
看了網上許多有關狀態轉移方程的解讀,私以為並沒有真正揭示出這樣做的理由。
為什麼dp[i][j]只需要考慮從dp[i-1][j],dp[i][j-1]和dp[i-1][j-1]這三者轉移而來,個人認為其原因在於,這只是在考慮僅通過「一次操作」得到dp[i][j]的遞推公式。至於計算dp[i][j]的過程中為何不用考慮dp[i-2][j],dp[i][j-2]等等?因為它們都是需要經過兩步操作及以上才能轉移到dp[i][j]的情況,最優解已經包含在上述討論的三種情況之中了。這也符合動態規劃最優子結構的原則。
class
solution
for(
int i=
0;i<=len2;i++
)for
(int i=
1;i<=len1;i++
)else
dp[i]
[j]=
min(dp[i-1]
[j],dp[i]
[j-1])
; dp[i]
[j]=
min(dp[i]
[j],dp[i-1]
[j-1])
+1;}
}return dp[len1]
[len2];}
};
Leetcode 72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r ...
leetcode 72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r r...
LeetCode72 編輯距離
給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r rorse rose 刪除 r rose ...