给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
思路:
- 首先要将数字对应的字母用一个数组存起来,这个定义是很重要的,决定着后续代码的复杂度
- 将传递过来的数字找到对应的字符数组存储
- 将字符数组对应的相应的组合(这一步是非常重要的,因为如果用普通的for循环的话不清楚需要几个for循环,这是第一步,for循环后还需要组合,这也是非常麻烦的一件事)
- reduce解决了困境,reduce本身是作为函数的累加器的,在这里也是相当于将不同的数据累加在存入数组里
var letterCombinations = function(digits) {
var str = {
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 < 1) return []
let darr = []
digits.split('').forEach((item)=>{
darr.push(str[item])
})
//reduce 是接受一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素
var result = darr.reduce((a,b)=>{
let temp = []
a.forEach((item1)=>{
b.forEach(item2=>{
temp.push(item1+item2)
})
})
return temp
})
return result
};
console.log(letterCombinations('23'))
reduce举例
const arr = [1, 2, 3, 4, 5]
const sum = arr.reduce((pre, item) => {
return pre + item
}, 0)
console.log(sum) // 15