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

たとえば、指定された文字列が「23」の場合、可能な文字列は[「ad」、「ae」、「af」、「bd」、「be」、「bf」、「cd」、「ce」になります。 」、「cf」]

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

  • 問題を再帰的に解決するために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)を呼び出します

例(Python)

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

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("37"))

入力

"37"

出力

["dp","dq","dr","ds","ep","eq","er","es","fp","fq","fr","fs"]

  1. Pythonのfactorial()

    数値の階乗を見つけることは、Pythonを含むデータ分析やその他の数学的分析で頻繁に必要とされます。階乗は、1から指定された数までのすべての整数を乗算することにより、常に正の整数に対して検出されます。以下に示すように、これを見つけるには3つのアプローチがあります。 Forループの使用 forループを使用して、指定された数まで1番を繰り返し、各ステップで乗算を続けることができます。以下のプログラムでは、ループで使用する前に、数値を入力して入力を整数に変換するようにユーザーに求めています。このようにして、計算で正の整数を確実に取得します。 例 n = input("Enter a nu

  2. Python正規表現を書く方法は、数字の繰り返しの数字を見つけますか?

    Python正規表現を使用して、指定された文字列の繰り返し数字を検索する次のコード 例 import re result = re.search(r'(\d)\1{3}','54222267890' ) print result.group() 出力 これにより、出力が得られます 2222