给定一个仅包含数字 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)
};