LeetCode-17 电话号码的字母组合 难度中等 JavaScript版本

49 阅读1分钟

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

示例 1:

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

示例 2:

输入: digits = ""
输出: []

示例 3:

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

提示:

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

代码实现:

/**
 * @param {string} digits
 * @return {string[]}
 */
const map = {
  2: ['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']
}

const letterCombinations = function (digits) {
  let array = [];
  for (let dight of digits) {
    let arr = map[dight];
    if (array.length === 0) {
      array.push(...arr);
    } else {
      let i = 0;
      let temp = JSON.parse(JSON.stringify(array));
      while (i < arr.length - 1) {
        temp.push(...array)
        i++
      }
      array = temp.sort();
      let j = 0
      i = 0;
      while (j < array.length) {
        array[j] += arr[i];
        if (i === arr.length - 1) {
          i = 0
        } else {
          i++
        }
        j++
      }
    }
  }
  return array;
};