解码方法
一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1 'B' -> 2... 'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1: 输入: "12" 输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2: 输入: "226" 输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
def numDecodings(self, s):
dp=[0]*(len(s)+1) #dp[0,1,2......n],len=n
if len(s)==0 or s[0]=='0': #边界情况(特殊情况)
return 0
dp[0]=1
dp[1]=1
for i in range(2,len(s)+1):
if s[i-1]>'0': #若s[i-1]不为0,则s[i-1]可单独存在,s[i]可由s[i-1]走1步到达
dp[i]=dp[i-1]
if s[i-2]=='1' or (s[i-2]=='2' and s[i-1]<='6') : #承接上面,若s[i-2]*10+s[i-1]<=26,则s[i]可由s[i-2]走2步到达
dp[i]+=dp[i-2]
return dp[len(s)]