zentan66 / daily-coding

日常手写算法,编程题
0 stars 0 forks source link

LeetCode-电话号码的字母组合 #18

Open zentan66 opened 3 years ago

zentan66 commented 3 years ago

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

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

难度:⭐️⭐️

zentan66 commented 3 years ago

编码

var letterCombinations = function (digits) {
  const keyMap = [
    ['a', 'b', 'c'],
    ['d', 'e', 'f'],
    ['g', 'h', 'i'],
    ['j', 'k', 'l'],
    ['m', 'n', 'o'],
    ['p', 'q', 'r', 's'],
    ['t', 'u', 'v'],
    ['w', 'x', 'y', 'z'],
  ]
  const res = []
  digits = digits.split('')
  function dfs(idx, prefixStr) {
    const list = keyMap[digits[idx] - 2]
    if (!list) return;
    for (const k of list) {
      if (idx === digits.length - 1) {
        res.push(`${prefixStr}${k}`)
      } else {
        dfs(idx + 1, `${prefixStr}${k}`)
      }
    }
  }
  dfs(0, '')
  return res
}

思路

合理利用深度搜索算法