leetcode电话号码的字母组合

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

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

在这里插入图片描述

示例:

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

思路:

  1. 首先要将数字对应的字母用一个数组存起来,这个定义是很重要的,决定着后续代码的复杂度
  2. 将传递过来的数字找到对应的字符数组存储
  3. 将字符数组对应的相应的组合(这一步是非常重要的,因为如果用普通的for循环的话不清楚需要几个for循环,这是第一步,for循环后还需要组合,这也是非常麻烦的一件事)
  4. 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
发布了42 篇原创文章 · 获赞 4 · 访问量 6106

猜你喜欢

转载自blog.csdn.net/qq_43427385/article/details/102781814