Leetcode 91.解码方法
1 题目描述(Leetcode题目链接)
一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
2 题解
本题是一道比较容易的动态规划问题,状态转移方程很好想,但是本题的边界条件有点多,主要还是对”0“的处理吧。
class Solution:
def numDecodings(self, s: str) -> int:
length = len(s)
DP = [0]*(length+1)
if s[0] == '0':
return 0
DP[0] = DP[1] = 1
for j in range(2, length+1):
if s[j - 2] == '1' or s[j - 2] == '2':
if s[j - 1] == '0':
DP[j] = DP[j - 2]
elif s[j - 2] + s[j - 1] <= '26':
DP[j] = DP[j - 2] + DP[j - 1]
else:
DP[j] = DP[j - 1]
else:
if s[j - 1] == '0':
return 0
else:
DP[j] = DP[j-1]
return DP[length]