Decode Ways
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.
分析:
动态规划题,注意,输入会有很多不合法的情况,比如‘100’之类的,这种情况下decoding方式为0。
不合法的情况有:串长度为0;串以0开头;串中出现00;串中出现30,40,50等串。
代码:
class Solution(object): def numDecodings(self, s): """ :type s: str :rtype: int """ f = {-1: 1} s_len = len(s) if s_len == 0 or s[0] == '0': return 0 f[0] = 1 i = 1 while i < s_len: if s[i] == '0' and (s[i - 1] > '2' or s[i - 1] == '0'): return 0 if s[i] == '0': f[i] = f[i - 2] elif 10 <= int(s[i-1:i+1]) <= 26: f[i] = f[i - 1] + f[i - 2] else: f[i] = f[i - 1] i += 1 return f[s_len - 1]