Last updated: Oct 24, 2022
Difficulty : medium
Runtime : 69 ms Faster than 85.77 %
Memory : 41.9 mb Lesser than 75.19 %

17. Letter Combinations of a Phone Number

Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.

A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

Example 1:

Input: digits = "23" Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"] Example 2:

Input: digits = "" Output: [] Example 3:

Input: digits = "2" Output: ["a","b","c"]

Constraints:

  • 0 <= digits.length <= 4
  • digits[i] is a digit in the range ['2', '9'].

solution:

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

var padLetters = {
  2: 'abc',
  3: 'def',
  4: 'ghi',
  5: 'jkl',
  6: 'mno',
  7: 'pqrs',
  8: 'tuv',
  9: 'wxyz',
};

var letterCombinations = function (digits) {
  if (digits === '') {
    return [];
  }

  // run a reducer on each digit and return accumulated result
  return [...digits].reduce(
    (prev, curr) => {
      var result = [];
      var lettersArr = [...padLetters[curr]];

      for (var i = 0; i < prev.length; i++) {
        for (var j = 0; j < lettersArr.length; j++) {
          result.push(prev[i] + lettersArr[j]);
        }
      }
      return result;
    },
    [''],
  );
};