Skip to content
On this page

17. 电话号码的字母组合

给定一个仅包含数字 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'] 的一个数字。

javascript
/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
  if(digits.length === 0) return []
  const digitsMap = {
    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']
  }
  if(digits.length === 1) return digitsMap[digits[0]]
  let i = 1, res = digitsMap[digits[0]].slice()
  while(i < digits.length) {
    const letters = digitsMap[digits[i]], len = res.length
    for (let k = 0; k < len; k++) {
      const str = res.shift()
      for (let j = 0; j < letters.length; j++) {
        res.push(str + letters[j])
      }
    }
    i++
  }
  return res
}

console.log(letterCombinations('22'))
console.log(letterCombinations('234'))
console.log(letterCombinations('23'))
console.log(letterCombinations('2'))
console.log(letterCombinations(''))