Python中电话号码的字母组合

假设我们有一个字符串,其中包含2到9之间的数字。我们必须返回该数字可能代表的所有可能的字母组合。下面给出了数字到字母的一种映射(就像在电话按钮上一样)。请注意,1不会映射到任何字母。

1
公元前2年
3

4
克高
5
j kl
6
m不
7
p qrs
8

9
w xyz
*
0#

例如,如果给定的字符串为“ 23”,则可能的字符串将为[“ ad”,“ ae”,“ af”,“ bd”,“ be”,“ bf”,“ cd”,“ ce ”,“ cf”]

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个名为Solve的数组以递归解决问题

  • resolve方法采用数字,字符,结果,current_string和current_level,该函数将类似于

  • 如果current_level =数字长度,则在结果后添加当前字符串,然后返回

  • 对于所有以字符为单位的字符i [digits [current_level]]

    • 执行求解(数字,字符,结果,current_string + i,current_level +1)

  • 实际功能会像

  • 如果数字长度为0,则返回一个空列表

  • 定义一个映射以将数字和相应字符保存为字符串

  • 结果:=空列表

  • 调用solve(数字,字符,结果,“”,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"]