用 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

相关文章