电话号码的组合

题目:给定一个只包含数字2-9的字符串,返回所有它能表示的字母组合,给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母

思路:

 

<script>
        const letterCombinations = str => {
            //建立电话号码键盘映射
            let map = ['', 1, '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 (map[item]) {
                    code.push(map[item]);
                }
            })

            //两两组合
            let comb = arr => {
                //临时变量,用来保存前两个组合的结果
                let tmp = [];

                //最外层的循环是遍历第一个元素,里层循环是遍历第二个元素
                for (let i = 0, il = arr[0].length; i < il; i++) {
                    for (let j = 0, jl = arr[1].length; j < jl; j++) {
                        //保存第一个元素的第i个字符、保存第2个元素的第j个字符
                        tmp.push(`${arr[0][i]}${arr[1][j]}`);
                    }
                }

                //前两个元素组合完后先“扔掉”,用临时变量去替换;
                // 替换后用前两个的结果去和下一个再次进行两两组合,以此类推
                arr.splice(0, 2, tmp);

                //判断能否进行两两组合,如果可以就进行递归操作,否则就直接返回tmp
                if (arr.length > 1) {
                    comb(arr);
                } else {
                    return tmp;
                }

                return arr[0];
            }

            return comb(code);
        }

        console.log(letterCombinations('38'));
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白小白从不日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值