LeetCode 17. Letter Combinations of a Phone Number


https://leetcode.com/problems/letter-combinations-of-a-phone-number/

質問する


数値からなる文字列を入力します.電話番号に該当する数字を入力できる場合は、数字を出力します.
Input: digits = "23"
Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"]

方法


まず、入力可能な数値文字を含むオブジェクトを作成します.
再帰関数で生成できる文字を含めて出力します.

コード#コード#

var letterCombinations = function (digits) {
  const phone = {
    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 res = [];
  if (!digits.length) {
    return res;
  }
  const find = (num, letter) => {
    if (!num.length) { //문자열을 끝가지 봤다면 저장하고 종료해준다.
      res.push(letter);
      return;
    }
    let nowNum = num[0]; //현재 문자열의 제일 앞 자리를 가져온다
    let leftNum = num.substr(1, num.length); //나머지 문자열을 저장해 다음 재귀함수에 전달해준다.
    for (let i of phone[nowNum]) {
      find(leftNum, letter + i);
    }
  };
  find(digits, "");

  return res;
};

ポスト


簡単に質問に答えた結果、他のJavaScriptユーザーの99.9%よりも早く、不思議でした.メモリは他の人よりずっと使われていて、他の人の解答も見たいです.