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')

本文介绍了一种解码计数算法,该算法用于确定给定编码消息中的数字序列可以被解码成字母的不同方式的数量。通过从后向前处理输入字符串,并依据特定规则更新解码路径数量,最终得出解码方案总数。
2140

被折叠的 条评论
为什么被折叠?



