• 技术文章 >web前端 >js教程

    JavaScript趣题:排列组合实战

    黄舟黄舟2017-02-04 15:08:36原创758
    首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。

    845.png

    大前端成长进阶课程:进入学习

    我们如果按了“2”这个键,那么可以调出“A”,“B”,“C”三种字母来。
    除了“1”和“0”键,其它数字键都可以调出多种字母来。
    现在问题来了,我选择四个任意数字键,可以得出多少种字母数字组合来?
    比方说,我选择了“0002”,因为“0”键没有对应的字母,所以,它的组合只有三种——“000A”,“000B”,“000C”。
    来个复杂点的例子,连续按“0023”,“0”保持不变,“2”可以对应“A”,“B”,“C”,“3”可以对应“D”,“E”,“F”,那么,按照排列组合的知识,应该有1*1*3*3=9种组合方式。
    好,那咋们来看怎么解决这个问题。
    第一步,根据数字键和对应字母的关系建立映射。

    var map = {  
        1 : [ 1 ],  
        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" ],  
        0 : [ 0 ]  
    };

    第二步,使用递归求解排列组合

    function telephoneWords(digitString) {  
        var array = [];  
        var result = [];  
        digitString.split("").forEach(function(e) {  
            array.push(map[e]);  
        })  
        var traverse = function foo(from, to) {  
            if (to.length < 4) {  
                var cur = from.shift();  
                for (var i = 0; i < cur.length; i++) {  
                    var newTo = to.slice(0);  
                    newTo.push(cur[i]);  
                    var newFrom = from.slice(0);  
                    foo(newFrom, newTo);  
                }  
            } else {  
                result.push(to.join(""));  
            }  
        };  
        traverse(array, []);  
        return result;  
    }

    以上就是 JavaScript趣题:排列组合实战的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:Javascript基础回顾之(三) js面向对象 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 带你了解Nodejs中的非阻塞异步IO• Angular学习之详解样式绑定(ngClass和ngStyle)的使用• JavaScript计算属性与监视(侦听)属性的使用• 聊聊基于Node实现单点登录(SSO)的方法• 【整理总结】优化jQuery性能的多种方法
    1/1

    PHP中文网