一、题目内容 中等

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

3. 电话号码的字母组合(17) - 图1

示例1:

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

示例2:

输入:digits = “” 输出:[]

示例3:

输入:digits = “2” 输出:[“a”,”b”,”c”]

二、解题思路

我们需要创建一个数字和字母的映射关系表。
遍历数字,找到第一个数字,搜索其对应的字母,选择其中一个。
然后找第二个数字,将题目的字母进行组合。
image.png

三、具体代码

  1. /**
  2. * @param {string} digits
  3. * @return {string[]}
  4. */
  5. const map = new Map([
  6. [0, ""],
  7. [1, ""],
  8. [2, "abc"],
  9. [3, "def"],
  10. [4, "ghi"],
  11. [5, "jkl"],
  12. [6, "mno"],
  13. [7, "pqrs"],
  14. [8, "tuv"],
  15. [9, "wxyz"],
  16. ])
  17. var letterCombinations = function (digits) {
  18. const len = digits.length;
  19. const res = [];
  20. const path = [];
  21. if (len === 0) return res;
  22. const backTracking = (start) => {
  23. if (start === len) {
  24. res.push(path.join(''));
  25. return;
  26. }
  27. const letter = map.get(Number(digits[start]))
  28. for (let i = 0; i < letter.length; i++) {
  29. path.push(letter[i])
  30. backTracking(start + 1);
  31. path.pop()
  32. }
  33. }
  34. backTracking(0);
  35. return res;
  36. };

四、其他解法