数组算法 电话号码组合

Posted wzndkj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组算法 电话号码组合相关的知识,希望对你有一定的参考价值。

给定一个仅包含 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射(如图)。注意1不对应任何字母
技术图片

 

 


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

规律:2 个一算,拼成 1 个,继续和下一个一算,拼成 2 个,直到最后
技术图片

 

 

 


代码
export default (str) => {
    if(!str) return;
    // 建立电话号码键盘映射
    let strMap = [‘‘, ‘‘, ‘abc‘, ‘def‘, ‘ghi‘, ‘jkl‘, ‘mno‘, ‘pqrs‘, ‘tuv‘, ‘wxyz‘];
    // 把输入字符串按单字符分隔变成数组,234 => [2,3,4]
    let num = str.split(‘‘);
    // 保存键盘映射后的字符内容,如 23 => [‘abc‘, ‘def]
    let code = [];
    num.forEach(item => {
        if (strMap[item]) {
            code.push(strMap[item])
        }
    })

    let comb = (arr) => {
        // 临时变量用来保存前两个组合的结果
        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);
        } else {
            return temp;
        }
        return arr[0];
    }
    return comb(code);
}

 

总结知识点
Array.prototype.splice

以上是关于数组算法 电话号码组合的主要内容,如果未能解决你的问题,请参考以下文章

[回溯算法]leetcode17. 电话号码的字母组合(c实现)

电话号码的字母组合--力扣

回溯算法之电话号码的字母组合

回溯算法例题----电话号码的字母组合

力扣算法JS LC [17. 电话号码的字母组合] LC [93. 复原 IP 地址]

算法leetcode|17. 电话号码的字母组合(rust重拳出击)