written at 20/06/02

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
LeetCode 17 - 电话号码的字母组合 - 图1
示例:

输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

简单的DFS便可以解决

代码**

  1. class Solution(object):
  2. def search(self, digits, state):
  3. if len(digits) == 0:
  4. self.combination.append(state)
  5. return
  6. letters = self.digits_dict[digits[0]]
  7. digits = digits[1:]
  8. for letter in letters:
  9. self.search(digits, state + letter)
  10. def letterCombinations(self, digits):
  11. """
  12. :type digits: str
  13. :rtype: List[str]
  14. """
  15. if len(digits) == 0: # mark
  16. return []
  17. self.digits_dict = {
  18. '2':'abc',
  19. '3':'def',
  20. '4':'ghi',
  21. '5':'jkl',
  22. '6':'mno',
  23. '7':'pqrs',
  24. '8':'tuv',
  25. '9':'wxyz',
  26. }
  27. self.combination = []
  28. self.search(digits, "")
  29. return self.combination

**