Skip to content
On this page

17. 电话号码的字母组合

原题链接:LeetCode 17. 电话号码的字母组合

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

**输入:**digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

**输入:**digits = "2" 输出:["a","b","c"]

提示:

- `1 <= digits.length <= 4`

- `digits[i]` 是范围 `['2', '9']` 的一个数字。

难度: Medium


题解代码

javascript
/**
 * @param {string} digits
 * @return {string[]}
 */
// 递归方法
// const letterCombinations = digits  => {
//     if (!digits.length) return []
//     if (digits.length === 1) return map[digits].split('')
    
//     const map = {
//         '2': 'abc',
//         '3': 'def',
//         '4': 'ghi',
//         '5': 'jkl',
//         '6': 'mno',
//         '7': 'pqrs',
//         '8': 'tuv',
//         '9': 'wxyz'
//     }
//     const ret = []
//     digits.split('').forEach(item => {
//         ret.push(map[item])
//     })

//     const comb = arr => {
//         const left = Array.isArray(arr[0]) ? arr[0] : arr[0].split('')
//         const right = arr[1]
//         const newItem = []
//         // 合并数组的第一个项,并替换掉第一二项
//         for (let i = 0; i < left.length; i ++) {
//             for (let j = 0; j < right .length; j++) {
//                 newItem.push(left[i] + right[j])
//             }
//         }

//         arr.splice(0, 2, newItem)
//         // 递归执行所有项
//         if (arr.length > 1) {
//             comb(arr)
//         }

//     }

//     comb(ret)
//     return ret[0]
// };

const map = {
    '2': 'abc',
    '3': 'def',
    '4': 'ghi',
    '5': 'jkl',
    '6': 'mno',
    '7': 'pqrs',
    '8': 'tuv',
    '9': 'wxyz'
}
var letterCombinations = digits  => {
    if (!digits.length) return []
    const ret = []
    backTrack(ret, '', digits)
    return ret
}

function backTrack (ret, path, digit) {
    if (!digit.length) {
        return ret.push(path)
    }
    const letters = map[digit[0]]
    for (let i = 0; i < letters.length; i++) {
        path += letters[i]
        backTrack(ret, path, digit.slice(1))
        path = path.slice(0, -1)
    }

}

技术文档集合