Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでメッセージをデコードできるいくつかの方法を見つけるためのプログラム


'a' =1、'b' =2、...'z' =26のようなマッピングがあり、エンコードされたメッセージメッセージ文字列があるとすると、デコードできる方法の数を数える必要があります。

したがって、入力がmessage ="222"の場合、出力は3になります。これは、bbb、bv、vbの3つの方法でデコードできるためです。

これを解決するには、次の手順に従います-

  • memo:=メッセージサイズ+1と同じサイズの0のリスト

  • memo [0]:=1

  • memo [1]:=1(message [0]が「0」と同じでない場合)それ以外の場合は0

  • 2からメッセージのサイズまでの範囲のiの場合、実行します

    • n1:=メッセージの数値[インデックスi-1からiまで]

    • n2:=メッセージの数値[インデックスi-2からiまで]

    • n1_valid:=n1> 0

      の場合はtrue
    • n2_valid:=n2>9およびn2<27の場合はtrue

    • n1_validがtrueの場合、

      • memo [i]:=memo [i] + memo [i-1]

    • n2_validがtrueの場合、

      • memo [i]:=memo [i] + memo [i-2]

  • メモの最後の要素を返す

理解を深めるために、次の実装を見てみましょう-

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

  1. Pythonで階段を上る方法をいくつ見つけるかをプログラムする

    n段の階段があり、一度に1段または2段の階段を上ることができるとします。階段を上るユニークな方法の数を返す関数を定義する必要があります。 ステップの順序は変更しないでください。そのため、ステップの異なる順序はそれぞれ1つの方法としてカウントされます。答えが非常に大きい場合は、結果を10 ^ 9+7で変更します したがって、入力がn =5のような場合、8つの固有の方法があるため、出力は8になります- 1、1、1、1、1 2、1、1、1 1、2、1、1 1、1、2、1 1、1、1、2 1、2、2 2、1、2 2、2、1 これを解決するには、次の手順に従いま

  2. リスト内で最大数を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: