美文网首页让前端飞Web前端之路
js算法之电话号码组合

js算法之电话号码组合

作者: jia林 | 来源:发表于2019-06-23 15:46 被阅读5次
<!DOCTYPE html>
<html>

<head>
    <title></title>
</head>

<body>
    <script type="text/javascript">
    // 电话号码组合
    // a.从映射的字符串变成数组
    // b.组合运算
    function phoneNum(str) {
        // I、保存隐射的内容  index=2=>abc  为了让数字和字母相对应 建立电话号码键盘隐射
        let map = ["", 1, "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"];
        //II、输入的字符串分割成不同字符,变成数组234=>[2,3,4]
        let num = str.split("");
        //III、输入字符串所映射的键盘内容  保存键盘映射后的字母内容 23=>["abc","def"]
        let code = [];
        num.forEach(item => {
            // item=> 2,3,4,5
            // map[item] =>abc,def
            if (map[item]) {
                code.push(map[item]);
            }
        });

        // IIII、组合运算
        let comb = (arr) => {
            // 临时变量,保存前2个组合的结果
            let tmp = [];
            // 最外层的循环是遍历第一个元素,里层的循环是遍历第二个元素
            for (let i = 0, il = arr[0].length; i < il; i++) {
                for (let j = 0, jl = arr[1].length; j < jl; j++) {
                    tmp.push(`${arr[0][i]}${arr[1][j]}`)
                }
            }
            // 从0删除2项,在插入一项
            // 把前2个元素扔掉,用临时变量替换,一直是两两组合
            arr.splice(0, 2, tmp);
            if (arr.length > 1) {
                comb(arr)
            } else {
                return tmp;
            }
            // 最后只返回一个元素
            return arr[0];
        }

        return comb(code);
    }
    console.log(phoneNum("23456") )
    </script>
</body>

</html>

相关文章

网友评论

    本文标题:js算法之电话号码组合

    本文链接:https://www.haomeiwen.com/subject/wtziqctx.html