其他细节 由于题目存在前导零 而前导零属于无效 item。可以进行特判 但习惯往字符串头部追加空格作为哨兵 追加空格既可以避免讨论前导零 也能使下标从 1 开始 简化 f[i-1] 等负数下标的判断。
class Solution: def numDecodings(self, s: str) - int: n len(s) f [1] [0] * n for i in range(1,n): if s[i] ! 0 : f[i] f[i-1] if int(s[i-1:i 1]) in range(10,27): f[i] f[i-2] return f[n-1]639. 解码方法 II
class Solution: def numDecodings(self, s: str) - int: mod 10**9 7 def check1digit(ch: str) - int: if ch 0 : return 0 return 9 if ch * else 1 def check2digits(c0: str, c1: str) - int: if c0 c1 * : return 15 if c0 * : return 2 if c1 6 else 1 if c1 * : return 9 if c0 1 else (6 if c0 2 else 0) return int(c0 ! 0 and int(c0) * 10 int(c1) 26) n len(s) # a f[i-2], b f[i-1], c f[i] a, b, c 0, 1, 0 for i in range(1, n 1): c b * check1digit(s[i - 1]) if i 1: c a * check2digits(s[i - 2], s[i - 1]) c % mod return c



