A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
思路:动态规划。当前解法=前一位总解法(当前字符合法)+前二位的总解法(当前字符和上一字符的结合合法)
class Solution(object):
def numDecodings(self, s):
"""
:type s: str
:rtype: int
"""
if not s or len(s)==0:return 0
n=len(s)
l = [0]*(n+1);l[0] = 1
l[1] = 1 if s[0:1]!='0' else 0
for i in range(2,n+1):
cur = int(s[i-1:i]);last = int(s[i-2:i])
if cur!=0:l[i]+=l[i-1]
if 10<=last and last<=26:l[i]+=l[i-2]
return l[n]