zoukankan      html  css  js  c++  java
  • 排列组合算法的javascript实现

    一、筛选数组内n个元素的组合情况


    function queue(arr, size) {
        if (size > arr.length) { return; }
        var allResult = [];

        (function (arr, size, result) {
            if (result.length == size) {
                allResult.push(result);
            } else {
                for (var i = 0, len = arr.length; i < len; i++) {
                    var newArr = [].concat(arr),
                        curItem = newArr.splice(i, 1);
                    arguments.callee(newArr, size, [].concat(result, curItem));
                }
            }
        })(arr, size, []);

        return allResult;
    }


    function choose(arr, size) {
        var allResult = [];

        (function (arr, size, result) {
            var arrLen = arr.length;
            if (size > arrLen) {
                return;
            }
            if (size == arrLen) {
                allResult.push([].concat(result, arr))
            } else {
                for (var i = 0; i < arrLen; i++) {
                    var newResult = [].concat(result);
                    newResult.push(arr[i]);

                    if (size == 1) {
                        allResult.push(newResult);
                    } else {
                        var newArr = [].concat(arr);
                        newArr.splice(0, i + 1);
                        arguments.callee(newArr, size - 1, newResult);
                    }
                }
            }
        })(arr, size, []);

        return allResult;
    }

    function showResult(result) {
        console.log('The number of result sets: ' + result.length);
        for (var i = 0, len = result.length; i < len; i++) {
            console.log(result[i]);
        }
    }


    var arr = ['姬光', '王子', '三桂', '科长'];

    showResult(choose(arr, 4));
    showResult(queue(arr, 4));
  • 相关阅读:
    【转】adb push&pull bug --- Permission denied----不错
    【转】notepad++设置字体和字体大小
    【转】 Ubuntu下配置USB转串口及串口工具配置--不错
    【转】 ubuntu下fastboot找不到devices
    【转】ubuntu下安装及设置FTP服务器!!
    【转】vsftp 遇到错误 500 OOPS: vsftpd: refusing to run with writable root inside chroot()--不错
    【转】ubuntu安装ftp服务器
    android网址
    【转】Linux下Android ADB驱动安装详解
    【转】(总结)Linux下su与su -命令的本质区别
  • 原文地址:https://www.cnblogs.com/gavinjay/p/13963378.html
Copyright © 2011-2022 走看看