假设我们的映射类似于'a'= 1,'b'= 2,...'z'= 26,并且我们有一个已编码的消息消息字符串,我们必须计算它可以被解码的方式的数量。
因此,如果输入类似于message =“ 222”,则输出将为3,因为可以用3种方式对此进行解码:bbb,bv和vb。
为了解决这个问题,我们将遵循以下步骤-
备忘:=与邮件大小相同的大小为0的列表+1
备忘录[0]:= 1
消息[0]与“ 0”不同时,备注[1]:= 1,否则为0
对于我在消息大小的2范围内,
备忘录[i]:=备忘录[i] +备忘录[i-2]
备忘录[i]:=备忘录[i] +备忘录[i-1]
n1:=消息的数值[从索引i-1到i]
n2:=消息的数值[从索引i-2到i]
n1_valid:=当n1> 0时为true
n2_valid:=当n2> 9和n2 <27时为true
如果n1_valid为true,则
如果n2_valid为true,则
返回备忘录的最后一个元素
让我们看下面的实现以更好地理解-
class Solution: def solve(self, message): memo = [0 for i in range(len(message)+1)] memo[0] = 1 memo[1] = 1 if message[0]!="0" else 0 for i in range(2,len(message)+1): n1 = int(message[i-1:i]) n2 = int(message[i-2:i]) n1_valid= n1>0 n2_valid= n2>9 and n2<27 if n1_valid: memo[i]+=memo[i-1] if n2_valid: memo[i]+=memo[i-2] return memo[-1] ob = Solution()message = "2223" print(ob.solve(message))
"2223"
输出结果
5