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.
这一道完全是细节题,简单列举几个数据,如'00','0','1212','1234'之后,即可推出规律:
从后向前处理,假如处理到第i位,
1、假如当前位和后一位均为0,则返回0
2、当前位和后一位不能组合,如'34',那么counts[i]=counts[i+1]
3、当前位和后一位可以组合,则counts[i]=counts[i+1]+counts[i+2]
初始化counts[len(s)]=1
代码如下:
class Solution: # @param s, a string # @return an integer def numDecodings(self, s): if len(s)<1 or s[0]=='0': return 0 counts={} counts[len(s)]=1 if s[-1]=='0': counts[len(s)-1]=0 else: counts[len(s)-1]=1 for i in xrange(len(s)-2,-1,-1): if s[i]=='0' : if s[i+1]=='0': return 0 else: counts[i]=0 elif int(s[i])<3 and int(s[i])>0 and int(s[i:i+2])<27 and int(s[i:i+2])>0: counts[i]=counts[i+2]+counts[i+1] else: counts[i]=counts[i+1] return counts[0] a=Solution() print a.numDecodings('10')