问题描述:一条包含字母A-Z的消息按如下方式编码:'A'->1'B'->2...'Z'->26给定一条消息只包含非空数字串,统计译码方法总数。示例1:输入:“12”输出:2解释:可以解码为“AB”(12)或“L”(12)。示例2:输入:"226"输出:3解释:它可以被解码为"BZ"(226)、"VF"(226)或"BBF"(226)。解题思路:动态规划。确定状态转移方程s[i]=s[i+1]+s[i+2](添加新数字时,需要判断单独编码和组合编码的总组合数),判断是否编码是合法的。代码如下:classSolution:defnumDecodings(self,s:str)->int:defhelp(i):ifiindic:returndic[i]ifi>=len(s):return1res=0#第一个合法案例(0不合法)if1<=int(s[i])<=9:res+=help(i+1)#前两个合法案例if10<=int(s[i:i+2])<=26:res+=help(i+2)#之所以需要dic是因为i+1和i+2的两次递归调用会产生重复的计算dic[i]=resreturnresdic={}returnhelp(0)ifselse0代码来源:https://leetcode-cn.com/probl...时空复杂度:来源:LeetCode链接:https://leetcode-cn.com/probl...
