LeetCode题目记录---解码方法(5)

第91题:解码方法

1.题目链接

[https://leetcode-cn.com/problems/decode-ways/]

2.题目内容

一条包含字母 A-Z 的消息通过以下方式进行了编码:

‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:
输入: “12”
输出: 2
解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。

示例 2:
输入: “226”
输出: 3
解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。

示例3:
输入: “100”
输出:0

示例4:
输入:“0”
输出: 0

本题需要注意“0”,考虑到零的位置,会多出很多条件。

3.解题思路

本题的思路(动态规划问题)主要考虑到各种条件限制:
(1)条件一:数字为空或为0,返回值为0;
(2)条件二:当后两个数是s[i-1]和s[i-2]都为“0”时,返回值为0;
(3)条件三:当s[i-2] + s[i-1] <= ‘26’ & s[i-2] == ‘0’ , m[i] = m[i-1];
       当s[i-2] + s[i-1] <= ‘26’& s[i-1] == ‘0’ ,m[i] =m[i-2];
       当s[i-2] + s[i-1] <= '26&其他情况下,m[i] = m[i-1]+m[i-2]
(4)条件四:当s[i-2] + s[i-1] > ‘26’ & s[i-1] == ‘0’,返回值为0;
       当s[i-2] + s[i-1] > ‘26’& 其他情况,m[i] = m[i-1];

期初的错误解法:不考虑0,即数字由1~9构成;
(1)当 s[i-1] >= “2” & s[i] > “6”,dp[i] = dp[i-1]
  其他条件下: dp[i] = dp[i-1] + dp[i - 2] 就会显得比较简单

4.代码实现

# 自己解法 
#(甲) 不考虑0的错误解法:
class Solution:
    def numDecodings(self, s: str) -> int:
		s = list(s)
		dp = [0] * int(len(s))
		dp[0] = 1
		if int(s[0]) >= 2 & int(s[1]) > 6:
		    dp[1] = 1
		else:
		    dp[1] = 2
		for i in range(2 , len(s)):
		    if int(s[i-1]) >= 2 & int(s[i]) > 6:
		        dp[i] = dp[i-1]
		    else:
		        dp[i] = dp[i-1] + dp[i - 2]
		return dp[-1]
 
# 考虑0的正确解法
class Solution:
    def numDecodings(self, s: str) -> int:
        n = len(s)
        if n==0:
            return 0
        if s[0] == '0':
            return 0       
        dp = [-1 for i in range(n+1)]
        dp[0] = 1
        dp[1] =1
        for i in range(2,n+1):          
            if s[i-2] == '0' and s[i-1] == '0':
                return 0
            if s[i-2] + s[i-1] <= '26':
                if s[i-2] == '0':
                    dp[i] = dp[i-1]
                elif s[i-1] == '0':
                    dp[i] = dp[i-2]
                else:
                    dp[i] = dp[i-1] + dp[i-2]
            elif s[i-1]=='0':
                return 0
            else:
                dp[i] = dp[i-1]
        return dp[-1] 

猜你喜欢

转载自blog.csdn.net/weixin_41725746/article/details/89028353
今日推荐