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

  1. 输入:digits = "23"
  2. 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

  1. 输入:digits = ""
  2. 输出:[]

示例 3:

  1. 输入:digits = "2"
  2. 输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

解法一:回溯

  1. function letterCombinations(digits: string): string[] {
  2. let res: Array<string> = []
  3. let n = digits.length
  4. if (n === 0) {
  5. return res
  6. }
  7. const hash : {[propName: string]: Array<string>} = {
  8. 2: ["a", "b", "c"],
  9. 3: ["d", "e", "f"],
  10. 4: ["g", "h", "i"],
  11. 5: ["j", "k", "l"],
  12. 6: ["m", "n", "o"],
  13. 7: ["p", "q", "r", "s"],
  14. 8: ["t", "u", "v"],
  15. 9: ["w", "x", "y", "z"],
  16. }
  17. function recursion(cur: string, next: string) {
  18. if (cur.length === n) {
  19. res.push(cur)
  20. return
  21. }
  22. for (let s of hash[next[0]]) {
  23. cur += s
  24. recursion(cur, next.slice(1))
  25. cur = cur.slice(0,-1)
  26. }
  27. }
  28. recursion("", digits)
  29. return res
  30. }