用 Python 编写程序,找出解码消息的方法数量
programmingpythonserver side programming
假设我们有这样的映射:'a' = 1, 'b' = 2, ... 'z' = 26,并且我们有一个编码的消息字符串,我们必须计算可以解码它的方式数量。
因此,如果输入类似于消息 = "222",则输出将为 3,因为这可以通过 3 种方式解码:bbb、bv 和 vb。
为了解决这个问题,我们将遵循以下步骤 −
memo := 大小与消息大小相同的 0 列表 + 1
memo[0] := 1
当 message[0] 与 "0" 不同时,memo[1] := 1否则为 0
对于介于 2 到消息大小之间的 i,执行
n1 := 消息的数值[从索引 i-1 到 i]
n2 := 消息的数值[从索引 i-2 到 i]
当 n1 > 0 时,n1_valid:= true
当 n2 > 9 且 n2 < 时,n2_valid:= true 27
如果 n1_valid 为真,则
memo[i] := memo[i] + memo[i-1]
如果 n2_valid 为真,则
memo[i] := memo[i] + memo[i-2]
返回 memo 的最后一个元素
让我们看看下面的实现以便更好地理解 −
示例
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