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));
  • 相关阅读:
    单元测试
    软件测试计划
    软件杯A9的设计与实现
    阅读笔记7
    阅读笔记6
    阅读笔记5
    阅读笔记4
    阅读笔记3
    阅读笔记2
    阅读笔记1
  • 原文地址:https://www.cnblogs.com/gavinjay/p/13963378.html
Copyright © 2011-2022 走看看