/*
全排列主要用到的是递归和数组的插入
arr: 需要排列的数组
第一步:从里面取一个,创建一个新的数组,形式为二维,例如arr = [1,2,3]; 取出3(没有特殊要求,随便取一个),放入 temp = [[3]],注意这里是二维数组,arr则为 arr=[1,2];
第二步: 从 arr逐一取出一个元素 currItem, 1
第三步:从 temp逐一 shift出一个元素,P这时的p为一个数组,[3];
第四步: 循环p数组,将currItem插入到p元素的各个位置得到 [1,3]和[3,1],并将结果加入到temp里面
第五步:取出arr中的2,重复三四步
*
* */
    //方法二
function permutate(array/*需要进行全排列的一维数组*/, permutatedArray/*存放返回结果*/) {
if (!permutatedArray) {
permutatedArray = [];
}
if (array.length > 1) {
//弹出第一个数
var elementCur = array.shift();
//排列剩余的数组
permutate(array, permutatedArray);
//返回剩余的数组的排列长度
var permutatedArrayLen = permutatedArray.length;
//第一个数与其他剩余数组所有数组组合
for (var j = 0; j < permutatedArrayLen; j++) {
//弹出不齐的组
var p = permutatedArray.shift();
//把当前元素放到排列好的数组的所有位置
for (var i = 0; i <= p.length; i++) {
//复制排列好的数组
var r = p.slice(0);
//插入数据到数组的位置
r.splice(i, 0, elementCur);
//保存
permutatedArray.push(r)
}
}
//退出条件
} else {
permutatedArray.push([array[0]]);
}
return permutatedArray;
} // a,b [] //方法一
function order(arr){
var permutatedArray = [];
if(arr.length > 1){ permutatedArray.push([arr.pop()]); for(var i = 0; i < arr.length; i++){
var elementCur = arr[i];
var len = permutatedArray.length; //这里很关键,必须先取len,因为后面数组长度会变化
for(var j = 0; j < len; j++){
var p = permutatedArray.shift(); for(var n = 0; n <= p.length; n++){
//复制排列好的数组
var r = p.slice(0);
//插入数据到数组的位置
r.splice(n, 0, elementCur);
//保存
permutatedArray.push(r)
}
} } }else{
return permutatedArray.push([array[0]]);
}
return permutatedArray;
} //permutate
console.log(order(["a","b","c"]));
console.log(permutate(["a","b","c"]));

  

js排列组合的更多相关文章

  1. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  2. js 排列 组合

    <script> //组合 function C(arr, num){ var r=[]; (function f(t,a,n){ if (n==0) return r.push(t); ...

  3. JS 排列组合

    function $CL(arr, n, noLC, arrDan) { //从arr中取n个组合,然后 var r = [], sum = 0; n = n - arrDan.length; (fu ...

  4. 用js实现排列组合

    在leetcode上看到一个题,代码实现排列组合的. 记得大学上课时候,就用c写过,现在用js试试,顺便看看耗时. 先看看3的阶乘: function permute(temArr,testArr){ ...

  5. 排列组合的实现(js描述)

    组合的实现 排列组合描述和公式 犹记得高中数学,组合表示C(m, n),意思为从集合m,选出n个数生成一项,总共有多少个项的可能?组合是无序的,排列是有序的.所以排列的项数量多于组合 排列A(n,m) ...

  6. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  7. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  8. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  9. 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

随机推荐

  1. Dubbo系列(一)dubbo的产生背景与原理概述

    一.Dubbo框架的产生背景        大规模服务化之前,应用只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) ...

  2. IO之复制文件的四种方式

    1. 使用FileStreams复制 这是最经典的方式将一个文件的内容复制到另一个文件中. 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B. 这是 ...

  3. docker容器安装命令

    apt-get update apt-get install vim 转载请注明博客出处:http://www.cnblogs.com/cjh-notes/

  4. Java实验报告(一)

    Java实验报告(一) 实验过程 1. 打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个" ...

  5. Nginx之configure选项

    1. 通用配置项 --prefix=<path>:Nginx 安装的根路径,所有其他的路径都要依赖于该选项. --sbin-path=<path>:指定 Nginx 二进制文件 ...

  6. Install chocolatey

    Requirements Windows 7+ / Windows Server 2003+ PowerShell v2+ .NET Framework 4+ (the installation wi ...

  7. ArcGIS Python 获得坐标

    import arcpy infc = arcpy.GetParameterAsText(0) # Identify the geometry field # desc = arcpy.Describ ...

  8. Ceph 存储集群搭建

    前言 Ceph 分布式存储系统,在企业中应用面较广 初步了解并学会使用很有必要 一.简介 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它具有高可靠性.安装方便.管理简便.能够 ...

  9. APScheduler 3.0.1浅析

    简介 APScheduler是一个小巧而强大的Python类库,通过它你可以实现类似Unix系统cronjob类似的定时任务系统.使用之余,阅读一下源码,一方面有助于更好的使用它,另一方面,个人认为a ...

  10. 根据需求定制 admin

    定义 list 页面 自定义 list_filter 首先,完成过滤器的功能,需要自定义过滤器.在 PostAdmin 定义的上方定义如下代码: class CategoryOwnerFilter(a ...