JS实现的全排列组合算法示例


Posted in Javascript onOctober 09, 2017

本文实例讲述了JS实现的全排列组合算法。分享给大家供大家参考,具体如下:

全排列组合算法,例如a,b,c,d进行全排列组合,则组合结果为:a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd。实现思路:从数据源拿出一个元素,依次与已存在的组合数据进行组合,循环上面操作直到数据源没有数据为止。

例子:

数据源a,b,c

1.拿出a,组合数据group为空,插入数据源a元素到组合数据group,此时group=[a]
2.拿出b,组合数据group拿出a,a和b组合,得到ab,把数据源b元素、ab插入组合数据group,此时group=[a,b,ab]
3.拿出c,组合数据group拿出a、b、ab,分别与c组合,分别得到ac、bc、abc,把数据源c元素、ac、bc、abc插入组合数据group,此时group=[a,b,ab,c,ac,bc,abc]

js代码:

var data = ['a','b','c','d'];
function getGroup(data, index = 0, group = []) {
  var need_apply = new Array();
  need_apply.push(data[index]);
  for(var i = 0; i < group.length; i++) {
    need_apply.push(group[i] + data[index]);
  }
  group.push.apply(group, need_apply);
  if(index + 1 >= data.length) return group;
  else return getGroup(data, index + 1, group);
}
console.log(getGroup(data));

运行输出结果:

JS实现的全排列组合算法示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
判断一个变量是数组Array类型的方法
Sep 16 Javascript
jquery ztree实现下拉树形框使用到了json数据
May 14 Javascript
jQuery $命名冲突解决方案汇总
Nov 13 Javascript
JavaScript中检查对象property的存在性方法介绍
Dec 30 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
jQuery中prepend()方法使用详解
Aug 11 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
Oct 04 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
JavaScript输入框字数实时统计更新
Jun 17 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
AJAX在JQuery中的应用详解
Jan 30 jQuery
js + css实现标签内容切换功能(实例讲解)
Oct 09 #Javascript
jQuery ajax调用webservice注意事项
Oct 08 #jQuery
js用类封装pop弹窗组件
Oct 08 #Javascript
利用js编写网页进度条效果
Oct 08 #Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 #Javascript
JS动态修改网页body的背景色实例代码
Oct 07 #Javascript
JS实现简单表格排序操作示例
Oct 07 #Javascript
You might like
给ECShop添加最新评论
2015/01/07 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
初识Node.js
2015/03/20 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python文件及目录操作实例详解
2015/06/04 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
详解python中的线程与线程池
2019/05/10 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
python批量解压zip文件的方法
2019/08/20 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
乡下人家教学反思
2014/02/01 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
公司员工培训管理制度
2015/08/04 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书