Javascript实现数组排列组合
在数学中有排列组合,用来计算概率。
比如:从n个数字中,任意选择m个的情况。从5个数字中任意选择3个数字的情况。(这里我们只考虑没有顺序的情况)。
公式:C(n,m)=n!/[m!(n-m)!]=n*(n-1)*...*(n-m+1)/[1*2*...*m],如C(5,2)=[5*4]/[1*2]=10.
举例说明:有 1,2,3,4 四个数字,从这四个数字中,任意选择两个数字一共有多少种情况:[1,2], [1,3], [1,4], [2,3], [2,4], [3,4]一共有这六种情况。
下面用代码实现从n个数字中任意选择m个的情况(不考虑顺序)。
/* arr 第一个参数 需要排列组合的数组,len 第二个参数为需要组合的个数 *//* 返回参数为多为数组[[],[]] */function rankFun(arr, len = 3) {var returnArr = [];var calculationFun = function(calcuArr, cArr = null) {var copyArr = [].concat(calcuArr);!cArr && copyArr.splice(0, 1);for(var i = 0, l = copyArr.length; i < l; i++) {var strArr1 = cArr? [].concat(cArr): [calcuArr[0]];strArr1.push(copyArr[i]);if(strArr1.length >= len) {returnArr.push(strArr1);} else {var newCopy = [].concat(copyArr);newCopy.splice(0, i+1);calculationFun(newCopy, strArr1);}}if(!cArr) {if(copyArr.length > len) {calculationFun(copyArr);} else {returnArr.push(copyArr);}}}len <= 1 ?(returnArr = arr) :calculationFun(arr);return returnArr;}var arr = [0,2,3,-1,8];console.log(rankFun(arr, 4));
代码输出结果如下:
Javascript实现数组排列组合相关推荐
- java排列组合二维数组_JavaScript 二维数组排列组合2
二维数组排列组合 var arrays = [ [ '1-1-雨尘', '1-2-芸芸', '1-3-简一', '1-4-乐乐' ] , [ '2-5-小明', '2-6-花花', '2-7-数数' ...
- 数组排列组合问题——BACKTRACKING
BACKTRACKING backtracking(回溯法)是一类递归算法,通常用于解决某类问题:要求找出答案空间中符合某种特定要求的答案,比如eight queens puzzle(将国际象棋的八个 ...
- js中多个数组排列组合
以项目中用到的数组排列组合为例,下图是最后的效果图(图只是用来说明并不具体实现): 数据\color{#ed1941}{数据}数据 data() {return {arr: [[{ name: &qu ...
- 数列的组合及排列方式java_java数组排列组合
⑥ 对于正面考虑太复杂的问题,可以考虑反面. ⑦ 对于一些排列数与组合数的问题,需要构造模型. 典例分析排列数组合数的简单计算 [例1] 对于满足 n ≥ 13 的正...... Java 实现排列组 ...
- java数组排列组合_java算法题--递归求数组中数字排列组合问题
java算法题–递归求数组中数字排列组合问题 题目:有一个数组{1,2,3},输出数组中数字的所有可能组合: 比如:123.132.213- 解题思路 通过递归不停的交换数组中的两个数(当然,肯定是有 ...
- java 数组的排列组合_java数组排列组合问题汇总
面试或笔试中,多次遇到以下4个关于排列组合的手撕算法,这里做个笔记,方法日后查阅: 1. 无重复元素的数组,求全排列: 2. 有重复元素的数组,求全排列: 3. 无重复元素的数组,求组合[子集]: 4 ...
- 数组排列组合算法汇总
求数组全排列(不包含或者包含重复元素) 求数组所有组合(相当于求集合的所有子集,不包含或者包含重复元素) 从n个数中选择k个的组合(不包含重复元素) 从n个数中选择k个的组合(包含重复元素) [版权声 ...
- Tyler and Strings(树状数组/排列组合/dp)
题目 题意:给定两个数组s,ts,ts,t,现重排列数组sss,使得数组sss小于ttt.问有多少种排列方式. 参考 代码源自cwxzh #include<bits/stdc++.h> u ...
- JavaScript二维数组元素排列组合
lizuncong (lizuncong) · GitHubI am a strong believer in reverse engineering. lizuncong has 42 reposi ...
最新文章
- 页面与ViewModel(上)
- 2、MySQL错误日志(Error Log)详解
- python计算2的平方代码_python – NumPy计算向量的范数2的平方
- js 在新窗口中打开URL
- wxPython布局管理
- LeetCode 748. 最短完整词
- HDU 6581 Vacation
- C++优先队列priority_queue详解
- IPv4地址何去何从 IPv6不向下兼容的尴尬
- HTTP的缺点与HTTPS
- android 仿ofo页面,GitHub - AndroidProject1212/react-native-ofo: React Native 仿 ofo 共享单车 App...
- CCS软件仿真 手把手教你 CCS 软件仿真 TMS320F2812
- C语言算法7744问题
- HTML5+CSS大作业 网页制作代码_大学生网页制作作业代码——年会抽奖网页设计(1页)
- Android Studio的反编译工具使用。
- 连八股文都不懂还指望在后端混下去么
- 迅雷9窗口右侧的内置浏览器如何去掉。
- 修改谷歌浏览器缓存位置总结
- cpu功耗排行_目前较低功耗的intel系cpu求推荐?
- m2硬盘写入速度测试软件,【英特尔 600P 512G PCIE M2 SSD 固态硬盘测试总结】读写速度|空间_摘要频道_什么值得买...
热门文章
- C语言指针之NULL
- ArcGIS10.2 因空间索引导致数据编辑保存速度慢问题
- 详细描述下自定义 View 测量时的 MesureSpec.UNSPECIFIED
- 堡垒机、堡垒机的原理
- python用selenium 验证码图片_selenium实现定位截图----获取验证码图片
- UVW源码漫谈(三)
- Elastic:如何成为一名 Elastic 认证工程师,Elastic 认证分析师及 Elastic 认证可观测性工程师
- TomCat启动不了的原因
- 前端html+css: 3D滚动正方体————按住鼠标左键即可拖动
- WSL2配置图形界面-MATE