Skip to content

[Leetcode] 17. Letter Combinations of a Phone Number ​

Problem ​

문제 링크

μ£Όμ–΄μ§„ 숫자 닀이얼을 μ΄μš©ν•˜μ—¬ μ•„λž˜ ν‚€νŒ¨λ“œλ‘œ λ‚˜μ˜¬μˆ˜ μžˆλŠ” 문자 쑰합을 λͺ¨λ‘ κ΅¬ν•˜μ—¬ν•˜λ €.

ν•Έλ“œν° 자판

Solution ​

  1. λ²ˆν˜Έλ§ˆλ‹€ ν‚€ 배열을 λ§€ν•‘ν•΄λ‘”λ‹€.
  2. μž¬κ·€ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ 순차적으둜 μ˜¬μˆ˜μžˆλŠ” κ²½μš°μ—λŒ€ν•΄ μ΅œλŒ€ κΈΈμ΄μ—μ„œ 값을 μ €μž₯ν•΄λ‘”λ‹€.

JS CODE ​

javascript
/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function (digits) {
  const phoneKeypad = {
    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'],
  }

  let answer = []

  const combinationStr = (digits, deep, strs) => {
    if (deep === digits.length) {
      strs.join() && answer.push(strs.join(''))
      return
    }

    for (const d of phoneKeypad[digits[deep]]) {
      strs[deep] = d
      combinationStr(digits, deep + 1, strs)
    }
  }

  combinationStr(digits, 0, Array(digits.length))

  return answer
}