2019-06-23-电话号码的字母组合

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

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

2019-06-23-电话号码的字母组合_第1张图片
image.png

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

去刷题

var letterCombinations = function (digits) {
    //构建映射,2-9对应英文字母
    let map = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'];
    //把传过来的字符串切割成数组,'23'->['2','3']
    let num = digits.split('')
    let code = []
    //把2-9筛选出来,其他字符过滤掉,以免参杂输入不正确的字符
    num.forEach((item) => {
        if (map[item]) {
            code.push(map[item].split(''))//切割成数组,例:['a','b','c']
        }
    })
    let comb = (arr) => {
        if (arr.length == 0)
            return arr
        else if (arr.length == 1) {
            return arr[0]
        }
        else {
            let temp = []
            for (let i = 0, il = arr[0].length; i < il; i++) {
                for (let j = 0, jl = arr[1].length; j < jl; j++) {
                    temp.push(`${arr[0][i]}${arr[1][j]}`)//用字符串模板排列组合
                }
            }
            //把数组的前两项合并成一个数组,合并后的一项和下一项进行操作,递归直到只剩下一项,扔出去
            arr.splice(0, 2, temp)
            if (arr.length > 1) {
                comb(arr)
            }
            return arr[0]
        }
    }

    return comb(code)
};

有问题请评论,我会一一回复

你可能感兴趣的:(2019-06-23-电话号码的字母组合)