之前文章中谈过排列组合算法,主要事递归,代码如下

const arrangeCombination = arr => {const res = [], len = arr.length, inner = ary => {for (let i = 0; i < len; i++) {let notHas = !ary.includes(arr[i]), tmp = [...ary, arr[i]];if (ary.length === len - 1) {notHas && res.push(tmp)continue}notHas && inner(tmp);}}inner([]);return res;
}

例如输入[1,2,3],

输出:[[ 1, 2, 3 ],[ 1, 3, 2 ],[ 2, 1, 3 ],[ 2, 3, 1 ],[ 3, 1, 2 ],[ 3, 2, 1 ]]。

不过只能解决无重复数的排序问题。

这几天稍作研究,尝试解决出了无重复数的排序,下面直接上代码

const arrangeCombinationRepeat = arr => {const res = [], len = arr.length,//保证两个数组中所有数所出现次数一致arrCompare = (a, b) => {const c = arr => arr.reduce((pre, cur) => (pre[cur] ? pre[cur]++ : (pre[cur] = 1), pre), {}), oa = c(a),ob = c(b)for (let i in oa) {if (oa[i] !== ob[i]) {return false}}return true},inner = ary => {for (let i = 0; i < len; i++) {let tmp = [...ary, arr[i]];if (ary.length === len - 1) {arrCompare(arr, tmp) && res.every(arr => JSON.stringify(arr) !== JSON.stringify(tmp)) && res.push(tmp);continue}inner(tmp);}};inner([]);return res;
}

验证输入:[1,1,3]

输出:[ [ 1, 1, 3 ], [ 1, 3, 1 ], [ 3, 1, 1 ] ]。

输入:[1,1,2,1,2]

输出:[
  [ 1, 1, 1, 2, 2 ],
  [ 1, 1, 2, 1, 2 ],
  [ 1, 1, 2, 2, 1 ],
  [ 1, 2, 1, 1, 2 ],
  [ 1, 2, 1, 2, 1 ],
  [ 1, 2, 2, 1, 1 ],
  [ 2, 1, 1, 1, 2 ],
  [ 2, 1, 1, 2, 1 ],
  [ 2, 1, 2, 1, 1 ],
  [ 2, 2, 1, 1, 1 ]
]。

js排列组合算法解决方案相关推荐

  1. js实现排列组合算法N选M

    JavaScript 从一个数组中拿出N个数(可放回),问共有多少种 今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下: function p(arr, N, ans){i ...

  2. php 组合算法,PHP简单排列组合算法示例分享

    本文主要和大家介绍了PHP实现的简单排列组合算法,结合具体应用实例分析了排列组合算法的实现与使用技巧,需要的朋友可以参考下,希望能帮助到大家. 一.问题: 给你一个40斤的西瓜,给3个人分,有多少种分 ...

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

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

  4. python 排列组合速度_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  5. 排列组合算法之二: 01转换法_java改变后的c++改进版

    http://blog.csdn.net/canguanxihu/article/details/46363375 排列组合算法之一: 01转换法_java改变后的c++版 class ZuheAss ...

  6. 排列 组合 算法(一)

    排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...

  7. python写排列组合_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  8. java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...

  9. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

最新文章

  1. 2018-3-19李宏毅机器学习视频学习笔记九----Classification: Probabilistic Generative Model
  2. 性能测试时需要关注哪些性能
  3. ipython使用_IPython的介绍与使用
  4. C++ inline variable
  5. SAP Spartacus 事件服务 Event Service 使用介绍
  6. Sparse Feature Learning
  7. .NET应用迁移到.NET Core(三)从商业角度看移植过程
  8. 转债---Pregel: A System for Large-Scale Graph Processing(译)
  9. CodeForces - 556C Case of Matryoshkas
  10. java表情字符怎么判断_判断字符串中是否包含Emoji表情代码
  11. oppor829t如何刷机_科普OPPO R1 R829T的线刷教程及最简单的三星手机刷机教程
  12. 【历史上的今天】1 月 5 日:正则表达式的发明人出生;英特尔发布酷睿系列;Microsoft Bob 诞生
  13. 使用N2N软件远程管理DLAP221设备
  14. 从思维走向实践,数字化转型 IT 经营的成功路径
  15. 将土豆或者youku 的视频放到自己的网站上面.
  16. 刚入行java程序员VS 3年以上java程序员,太形象了,哈哈哈~·~
  17. 蓝桥杯基础练习一闰年判断
  18. cms概述 。比较shopex和ecshop区别 。smarty模板引擎的入门
  19. 【awk】输出不同列、左对齐or右对齐
  20. achb的c语言题目,C语言程序设题目及解答-09.doc

热门文章

  1. 直播美颜SDK的崛起之路
  2. 互联网职场真的就像一场《鱿鱼游戏》
  3. pdf生成:puppeteer
  4. Java(2): java for循环遍历数组
  5. uniapp前端用forEach循环遍历数组
  6. 计算机中显示器的分类,显示器屏幕有哪些类型 2017电脑显示面板类型大全
  7. iphone12录屏功能在哪儿(如何录屏)
  8. MyBatis之RowBounds实现分页查询
  9. 佳能85mmF#1.4L IS USM镜头构造
  10. python 最快 因式分解_python的因式分解