125. Leetcode 91. 解码方法 (动态规划- 字符串系列)
生活随笔
收集整理的這篇文章主要介紹了
125. Leetcode 91. 解码方法 (动态规划- 字符串系列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
步驟一、確定狀態:
確定dp數組及下標含義 dp[i]表示的是到i這個位置的字符串的解碼方法
步驟二、推斷狀態方程:
dp[i]的推導會取決于當前s[i]的字符情況以及前一位字符,具體如下:
如果當前的s[i]=='0': 這說明自己無法單獨解碼,需要跟著前面一位進行解碼,但是這 時候前面的一位必須是1或者2, 此時dp[i]=dp[i-2](下標為1處單獨判斷),否則此串無 法解碼,返回0
如果前面的s[i-1]=='1': 這說明當前的s[i]可以自己解碼,也可以和前面的一塊解碼,所 以解碼方法是dp[i] = dp[i-1] + dp[i-2](下標為1處單獨判斷)
dp[i-1]表示自己解碼,dp[i-2]表示和前面一塊解碼
如果前面的s[i-1]=='2'且當前的s[i]在1-6之間: 這時候s[i]同樣可以單獨解碼,可以和 前面一塊解碼,動態方程和上面一樣
除去上面這些特征情況,剩下的就是是s[i]單獨解碼的情況了,此時dp[i]=dp[i-1]
步驟三、規定初始條件:
初始條件:
全局初始化為0
步驟四、計算順序: 從1開始正向遍歷
class Solution:def numDecodings(self, s: str) -> int:if len(s) == 0 or s[0] == "0":return 0dp = [0 for i in range(len(s))]dp[0] = 1for i in range(1, len(s)):if s[i] == '0':if s[i-1] not in ['1','2']:return 0if i == 1:dp[i] = 1else:dp[i] = dp[i-2]elif s[i-1] == '1' or s[i-1] == '2' and s[i] in ['1','2','3','4','5','6']:if i == 1:dp[i] = 2else:dp[i] = dp[i-1] + dp[i-2]else:dp[i] = dp[i-1]return dp[-1]總結
以上是生活随笔為你收集整理的125. Leetcode 91. 解码方法 (动态规划- 字符串系列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 124. Leetcode 583. 两
- 下一篇: 126. Leetcode 剑指 Off