λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/leetcode

LeetCode 17 - Letter Combinations of a Phone Number (Medium)

by HandHand 2021. 3. 2.

문제

LeetCode - 17번

풀이 κ³Όμ •

νœ΄λŒ€ν° μžνŒμ„ μ΄μš©ν•΄μ„œ λ§Œλ“€ 수 μžˆλŠ” λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ°ΎλŠ” λ°±νŠΈλž˜ν‚Ή λ¬Έμ œμž…λ‹ˆλ‹€.

각 μˆ«μžλ³„λ‘œ ν• λ‹Ήλœ λ¬Έμžλ“€μ„ ν‘œν˜„ν•΄μ£ΌλŠ” λ‹€μ–‘ν•œ 방법듀 (Map, Object λ“±) 이 μžˆμ§€λ§Œ
μ €λŠ” 배열에 인덱슀둜 μ ‘κ·Όν•˜λŠ” 방법을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

숫자둜 이루어진 주어진 μž…λ ₯ λ¬Έμžμ—΄μ„ ν•œ μžλ¦¬μ”© μˆœνšŒν•˜λ©° λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  λ¬Έμžμ—΄μ„ μž¬κ·€ν˜ΈμΆœλ‘œ μƒμ„±ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ½”λ“œ

/**
 * @param {string} digits
 * @return {string[]}
 */

const buttons = [
  0,
  0,
  "abc",
  "def",
  "ghi",
  "jkl",
  "mno",
  "pqrs",
  "tuv",
  "wxyz",
];

var letterCombinations = function (digits) {
  if (!digits.length) return [];

  function dfs(idx, selected, answer) {
    if (idx === digits.length) {
      answer.push(selected.join(""));
      return;
    }

    for (let c of buttons[parseInt(digits[idx])]) {
      selected.push(c);
      dfs(idx + 1, selected, answer);
      selected.pop();
    }
  }

  const answer = [];
  dfs(0, [], answer);

  return answer;
};
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€