给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
let map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxzy']
let num = digits.split('')
// 保存键盘映射后的字母内容,如 23 => abc,def
let code = []
num.forEach(item => {
if (map[item]) {
code.push(map[item])
}
})
let comb = (arr) => {
// 临时变量,用来保存前两个变量组合的结果
let tmp = []
// 数组可能为空''
if(arr != '') {
// 当数组为1位时,将arr[0]字符串直接转换为数组return
if(arr.length < 2) {
for(let i = 0; i < arr[0].length; i++) {
tmp.push(`${arr[0][i]}`)
}
return tmp;
}else {
// 最外层的循环是遍历第一个元素,里层循环是遍历第二个元素
for (let i = 0; i < arr[0].length; i++) {
for (let j = 0; j < arr[1].length; j++) {
tmp.push(`${arr[0][i]}${arr[1][j]}`)
}
}
}
}
arr.splice(0, 2, tmp)
if (arr.length > 1) {
comb(arr)
} else {
return tmp
}
return arr[0]
}
return comb(code)
};