题目描述:
题解:
参考:https://blog.csdn.net/qq_36512295/article/details/101049734
利用动态规划方法解决:
1.dp[i]保存到字符串s的第i个位置,有多少种解码方法。
2.对s[i]:
如果s[i-1:i+1]为'00'或s[i]='0',s[i-1]>‘2’,则所有解码方法都不合法,返回0.
如果s[i-1:i+1]在1-26之间,且s[i]不为'0',则s[i]可与s[i-1]一起解码,也可单独解码,则dp[i]=dp[i-2]+dp[i-1]
如果s[i]为'0',且s[i-1]<'2',则s[i]必须与s[i-1]一起解码,即dp[i]=dp[i-2]
其他情况:即s[i]不为‘0’,且s[i-1:i+1]>'26‘,则s[i]只能单独解码,无法与s[i-1]一起解码,则dp[i]=dp[i-1]
class Solution(object): def numDecodings(self, s): if s[0]=='0': return 0 dp = [1,1] for i in range(1,len(s)): if s[i-1:i+1]=='00' or (s[i]=='0' and s[i-1]>'2'): return 0 if '1'<=s[i-1:i+1]<='26' and s[i]!='0': dp.append(dp[-2]+dp[-1]) elif s[i]=='0': dp.append(dp[-2]) else: dp.append(dp[-1]) return dp[-1]