js排列组合
/*
全排列主要用到的是递归和数组的插入
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排列组合的更多相关文章
- js 排列 组合 的一个简单例子
最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...
- js 排列 组合
<script> //组合 function C(arr, num){ var r=[]; (function f(t,a,n){ if (n==0) return r.push(t); ...
- JS 排列组合
function $CL(arr, n, noLC, arrDan) { //从arr中取n个组合,然后 var r = [], sum = 0; n = n - arrDan.length; (fu ...
- 用js实现排列组合
在leetcode上看到一个题,代码实现排列组合的. 记得大学上课时候,就用c写过,现在用js试试,顺便看看耗时. 先看看3的阶乘: function permute(temArr,testArr){ ...
- 排列组合的实现(js描述)
组合的实现 排列组合描述和公式 犹记得高中数学,组合表示C(m, n),意思为从集合m,选出n个数生成一项,总共有多少个项的可能?组合是无序的,排列是有序的.所以排列的项数量多于组合 排列A(n,m) ...
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
随机推荐
- maven在pom文件中引入了icepdf-core包,pom文件却莫名的报错,说jai_core包missing
maven在pom文件中引入了icepdf-core包,却莫名的报错,说jai_core包missing,把这个jai_core包引入之后还是一样报错,PS:icepdf-core使用的时候不用引用j ...
- MySQL所谓的脏页和“抖”一下是什么联系?
在我们平时经常用到的sql更新语句,之前是认为只要sql执行,当前sql的操作会立马执行到服务器磁盘上并返回,但是后来我才知道,事实并非如此,在了解事实之前,首先可能需要先了解什么是redo log, ...
- 使用UltraISO制作linux系统安装u盘启动盘
1.首先打开UltraISO软件,尽量下载最新版的,小编曾用某个旧版的UltraISO,制作的安装盘,不能不能识别磁盘,安装失败! 2.点击工具栏中的第二个打开镜像文件工具,如图红色方框标志按钮,然后 ...
- [BTS] BizTalk WCF-SQL Adapter 高级应用
9102年岁尾,41岁的我居然还在搞 BizTalk,感觉就是一种悲伤. 国内用户少之又少,能坚持一直在使用的“忠实”用户那就更少了. 不是它不好用,而是微软全线转向云服务,这个产品也已经快10年没有 ...
- Django连接MySQL出错
错误一:No module named 'MySQLdb' 原因:python3连接MySQL不能再使用mysqldb,取而代之的是pymysql. 解决方法:在python的MySQL包中,即路径: ...
- SAN LAN MAN WAN的区别
主要是范围不同 SAN: System Area NetworkLAN: Local Area NetworkMAN: Metropolitan Area NetworkWAN: Wide Area ...
- php的时区修改
Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to ...
- partprobe 和 partx 的用法
partprobe: 用于重读分区表,当出现删除文件后,出现仍然占用空间.可以partprobe在不重启的情况下重读分区. 将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表. -d 不更新内核 ...
- HBase管理与监控——HBase region is not online
发现有些regison程序操作失败,其他region 都是正常的,重启regionserver 后依然报同样的错误. 首先进入hbase的bin目录,执行下面命令检查表是否有存储一致性问题: hbas ...
- php代码判断用户访问的当前协议是否为https
public function isHttps() { if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) ...