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

Pythonで電話のキーパッドを使用して入力されたすべての可能な文字列を検索するプログラム


2〜9の数字を含む文字列があるとします。数字が生成する可能性のあるすべての文字の組み合わせを見つける必要があります。数字から文字への1つのマッピング(電話ボタンの場合と同様)を以下に示します。 1は一部の文字をマップしますが、文字はマップしないことに注意してください。

1
2
a b c
3
d e f
4
g h i
5
j k l
6
m n o
7
p q r s
8
t u v
9
w x y z
*
0

たとえば、指定された文字列が「49」の場合、可能な文字列は['gw'、'gx'、'gy'、'gz'、'hw'、'hx'、'hy'、'hzになります。 '、' iw'、' ix'、' iy'、' iz']

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

  • 問題を再帰的に解決するためにsolveという配列を定義します
  • solveメソッドは数字、文字、結果、current_string、current_levelを取り、関数は次のようになります
  • current_level =桁の長さの場合、結果の後に現在の文字列を追加して、戻ります
  • すべての文字iの文字[数字[current_level]]
    • solve(数字、文字、結果、current_string + i、current_level + 1)を実行します
  • 実際の機能は次のようになります
  • 桁の長さが0の場合、空のリストを返します
  • 数字と対応する文字を文字列として保持する1つのマップを定義します
  • 結果:=空のリスト
  • sort(digits、characters、result、“”、0)を呼び出します

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

class Solution(object):
   def letterCombinations(self, digits):
      if len(digits) == 0:
         return []

      characters = {2:"abc",3:"def",4:"ghi",5:"jkl",6:"mno",7:"pqrs",8:"tuv",9:"wxyz"}
      result = []
      self.solve(digits,characters,result)
      return result
   def solve(self, digits, characters, result, current_string="",current_level = 0):
      if current_level == len(digits):
         result.append(current_string)
      return
   for i in characters[int(digits[current_level])]:
self.solve(digits,characters,result,current_string+i,current_level+1)

ob1 = Solution()
print(ob1.letterCombinations("49"))

入力

"49"

出力

['gw', 'gx', 'gy', 'gz', 'hw', 'hx', 'hy', 'hz', 'iw', 'ix', 'iy', 'iz']

  1. Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム

    n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=

  2. 配列内のすべての桁を使用して3つの数値で割り切れる可能性があるかどうかを確認するPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 整数の配列入力が与えられた場合、3で割り切れるように、これらの数値で使用可能なすべての数字を使用して整数を作成できるかどうかを確認する必要があります。 ここでは、整数の配列と配列の長さという2つの引数を取る関数を生成します。 以下に示す実装は、精神数学の概念に基づいて機能します。ここでは、桁の合計が3で割り切れる場合、数値は3で割り切れることがわかります。 次に、以下の実装を見てみましょう- 例 def isPossibleToMakeDivisible(arr, n): &nbs