原题链接:leetcode17
题目描述:给定数字和字母之间的映射,任意输入数字,返回数字对应字母的所有组合
思路:
首先利用map将数字和字母之间的映射表示出来,然后通过观察每次输入一个数字的时候就是在原有的res中每一个元素都与当前输入数字对应的元素进行组合 得到新的res
小知识点: map初始化的赋值为二维数组
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function (digits) {
// 电话号码和字母映射处理
let map = new Map([
['2', ['a', 'b', 'c']],
['3', ['d', 'e', 'f']],
['4', ['g', 'h', 'i']],
['5', ['j', 'k', 'l']],
['6', ['m', 'n', 'o']],
['7', ['p', 'q', 'r', 's']],
['8', ['t', 'u', 'v']],
['9', ['w', 'x', 'y', 'z']]
])
// 边界值处理
if (digits.length == 0) return []
let res = map.get(digits[0])
for (let i = 1; i < digits.length; i++) {
let digitsval = map.get(digits[i])
let tempres = []
// 遍历已经组合的res中的每一个元素
for (let j = 0; j < res.length; j++) {
// 拿数字对应的字母 和res中的当前元素进行组合
digitsval.map(item => {
tempres.push(res[j].concat(item))
})
}
// 最后处理完之后,将值赋值给res作为最后的组合
res = tempres
}
return res
};
let digits = '23'
console.log(letterCombinations(digits))