题目

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

示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

方案一

  1. class Solution:
  2. def __init__(self):
  3. self.map = {
  4. "2": ["a", "b", "c"],
  5. "3": ["d", "e", "f"],
  6. "4": ["g", "h", "i"],
  7. "5": ["j", "k", "l"],
  8. "6": ["m", "n", "o"],
  9. "7": ["p", "q", "r", "s"],
  10. "8": ["t", "u", "v"],
  11. "9": ["w", "x", "y", "z"]
  12. }
  13. def letterCombinations(self, digits: str) -> List[str]:
  14. if not digits:
  15. return []
  16. if len(digits) == 1:
  17. return self.map[digits]
  18. # 前 i 个 digits 组成的 ret
  19. res = self.letterCombinations(digits[:-1])
  20. ret = []
  21. for each in res:
  22. for word in self.map[digits[-1]]:
  23. ret.append(each + word)
  24. return ret