/* * * 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. * More info: https://leetcode.com/problems/letter-combinations-of-a-phone-number/ */ /* * @param {string} digits * @returns {string[]} all the possible combinations */ const letterCombinations = (digits) => { const length = digits?.length const result = [] if (!length) { return result } const digitMap = { 2: 'abc', 3: 'def', 4: 'ghi', 5: 'jkl', 6: 'mno', 7: 'pqrs', 8: 'tuv', 9: 'wxyz' } const combinations = (index, combination) => { let letter let letterIndex if (index >= length) { result.push(combination) return } const digit = digitMap[digits[index]] letterIndex = 0 while ((letter = digit[letterIndex++])) { combinations(index + 1, combination + letter) } } combinations(0, '') return result } export { letterCombinations }