512. 解码方法
有一个消息包含A-Z通过以下规则编码’A’ -> 1’B’ -> 2…Z’ -> 26现在给你一个加密过后的消息,问有几种解码的方式
代码
def numDecodings(self, s):
ss=len(s)
if(ss==0):
return 0
dp = [[0] for i in range(ss+1)]
dp[0]=1
for i in range (1,ss+1,1):
dp[i]=0
if i>=1:
t=int(s[i-1])-int('0')
if t>=1 and t<=9:
dp[i]=dp[i]+dp[i-1]
if i>=2:
t=(int(s[i-2])-int('0'))*10+(int(s[i-1])-int('0'))
if t>=10 and t<=26:
dp[i]=dp[i]+dp[i-2]
return dp[ss]
想法
状态转移方程:从后面来看,要得到前len(s)个数的解,就必须得到前len(s)-1 与len(s)-2的结果,因为其结果来源是这两种方式(范围为1-26).
t=int(s[i-1])-int(‘0’),之所以用‘0’,而不是0,这是由于ASCII码的原因。