Python中的电话号码字母组合


假设我们有一个字符串,包含从2到9(包含2和9)的数字。我们需要返回该数字可以表示的所有可能的字母组合。数字到字母的映射(就像电话按键一样)如下所示。请注意,1不映射到任何字母。

12
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方法接受数字、字符、结果、当前字符串和当前级别,函数将如下所示:
  • 如果当前级别等于数字的长度,则在结果之后添加当前字符串,然后返回。
  • 对于characters[digits[current_level]]中的所有字符i:
    • 执行solve(digits, characters, result, current_string + i, current_level + 1)
  • 实际函数将如下所示:
  • 如果数字长度为0,则返回空列表。
  • 定义一个map来保存数字和对应的字符(作为字符串)。
  • result := 空列表
  • 调用solve(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"]

更新于:2020年4月27日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.