leetcode——91.解码方法

class Solution:
    def numDecodings(self, s: str) -> int:
        a={}
        if int(s[0])==0:
            return 0
        else:
            a[0]=1
        if len(s)==1:
            return a[0]
        if int(s[0])>2 and int(s[1])==0:
            a[1]=0
            if len(s)>1:
                return 0
        if (int(s[0]+s[1])>26) or (int(s[0])<3 and int(s[1])==0):
            a[1]=1
        elif int(s[0]+s[1])<=26:
            a[1]=2
        #print(a)
        if len(s)==2:
            return a[1]
        for i in range(2,len(s)):
            if s[i-1]==‘0‘ and s[i]==‘0‘:
                return 0
            elif int(s[i-1])>2 and s[i]==‘0‘:
                return 0
            elif (int(s[i-1]+s[i]))>26 or (s[i-1]==‘0‘ and int(s[i])!=0):
                a[i]=a[i-1]
            elif int(s[i-1])<3 and s[i]==‘0‘:
                a[i]=a[i-2]
            elif int(s[i-1]+s[i])<=26:
                a[i]=a[i-1]+a[i-2]
            else:
                a[i]=a[i-1]
        return a[len(s)-1]

执行用时 :44 ms, 在所有 python3 提交中击败了88.37%的用户

内存消耗 :14 MB, 在所有 python3 提交中击败了5.21%的用户

思路分析:

当字符串的首位为0的时候,直接输出0;

先分析给定前两位的种类个数,统一分析长度大于2的情况;

如果中间位出现30,40,50等等的这种情况以及00的这种情况,直接输出0;

如果像31,58这种大于26的数,输出结果与前一位的结果相同,即a[i]=a[i-1];

如果像02,03,09这种情况,a[i]=a[i-1];

如果是10,20这样的情况,a[i]=a[i-2]

如果是23,18等这种小于27的情况,a[i]=a[i-1]+a[i-2]

结束。

——2019.10.15

原文地址:https://www.cnblogs.com/taoyuxin/p/11676790.html

时间: 2024-11-11 03:02:52

leetcode——91.解码方法的相关文章

leetcode 91. 解码方法 JAVA

题目: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12). 示例 2: 输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), "

91.解码方法(动态规划)

一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 初思路: 一看到本题,我就想用回溯算法来递归,因为遇到 10<s[:2]<27的时候 就可以递归两条路径,一条是分开,一条是合并 但是递归方法时间复杂度高,存在大量的重复计算,比如 分开转化s[0],s[1] 与合并s[0:2],还是回到处理 s[2:]的路径上,所以我再去看看答案. 观后思路: 本题确实就是 爬

91. 解码方法

题目描述 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12). 示例 2: 输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), "

Leetcode 639.解码方法2

解码方法2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以包含字符 '*'了,字符'*'可以被当做1到9当中的任意一个数字. 给定一条包含数字和字符'*'的加密信息,请确定解码方法的总数. 同时,由于结果值可能会相当的大,所以你应当对109 + 7取模.(翻译者标注:此处取模主要是为了防止溢出) 示例 1 : 输入: "*" 输出: 9 解释: 加密的信息可

力扣91.解码方法

题目 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12). 示例 2: 输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), "V

Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)

Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给一串包含数字的加密报文,求有多少种解码方式 举个例子,已知报文"12",它可以解码为AB(1 2),也可以是L (12) 所以解码方式有2种. 测试样例 Input: "0" "121212" "1010

LeetCode OJ: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

[LeetCode] 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

[Swift]LeetCode639. 解码方法 2 | Decode Ways II

A message containing letters from A-Z is being encoded to numbers using the following mapping way: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Beyond that, now the encoded string can also contain the character '*', which can be treated as one of the numbers