Skip to content

Latest commit

 

History

History
45 lines (41 loc) · 1.14 KB

17. 电话号码的字母组合.md

File metadata and controls

45 lines (41 loc) · 1.14 KB

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

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

solution:

/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    if (digits.length === 0) return []
    const digMap = new Map([
        [2, 'abc'],
        [3, 'def'],
        [4, 'ghi'],
        [5, 'jkl'],
        [6, 'mno'],
        [7, 'pqrs'],
        [8, 'tuv'],
        [9, 'wxyz']
    ])
    function dig2let (preCombinations, dig) {
        if (dig.length === 0) return preCombinations
        if (preCombinations.length === 0) {
            return dig2let(digMap.get(parseInt(dig[0])).split(''), dig.substr(1))
        }
        const temp = []
        preCombinations.forEach((val, idx) => {
            for (let i of digMap.get(parseInt(dig[0])).split('')) {
                temp.push(val + i)
            }
        })
        return dig2let(temp, dig.substr(1))
    }
    return dig2let([], digits)
};