java 实现排列组合输出
排列数
排列数基本概念
排列数指的是从nnn个不同元素中任取r(r≤n)r(r \leq n)r(r≤n)个元素排成一列(考虑元素先后顺序)。排列与元素的顺序有关。
Anm=n(n−1)(n−2)……(n−m+1)=n!(n−m)!A_n^m = n(n-1)(n-2)……(n-m+1) = \frac{n!}{(n-m)!} Anm=n(n−1)(n−2)……(n−m+1)=(n−m)!n!
最简单的例子就是数字组合,如从1,2,3,41,2,3,41,2,3,4中任取3个组合成一个三位数:
123,124,132,134,142,143
213,214,231,234,241,243
312,314,321,324,341,342
412,413,421,423,431,432
共A43=24A_4^3 = 24A43=24种
代码输出所有排列方式
/*** 排列选择(从列表中选择n个排列)* @param dataList 待选列表* @param n 选择个数*/public static void arrangementSelect(String[] dataList, int n, List<String[]> result) {arrangementSelect(dataList, new String[n], 0,result);}/*** 排列选择* @param dataList 待选列表* @param results 前面(resultIndex-1)个的排列结果* @param resultIndex 选择索引,从0开始*/private static void arrangementSelect(String[] dataList, String[] results, int resultIndex, List<String[]> result) {int resultLen = results.length;if (resultIndex >= resultLen) { // 全部选择完时,输出排列结果String [] temps = new String[resultLen];System.arraycopy(results, 0, temps, 0, results.length);result.add(temps);
// System.out.println(Arrays.asList(temps));return;}// 递归选择下一个for (String aDataList : dataList) {// 判断待选项是否存在于排列结果中boolean exists = false;for (int j = 0; j < resultIndex; j++) {if (aDataList.equals(results[j])) {exists = true;break;}}if (!exists) { // 排列结果不存在该项,才可选择results[resultIndex] = aDataList;arrangementSelect(dataList, results, resultIndex + 1, result);}}}
组合数
组合数基本概念
排列数指的是从nnn个不同元素中任取r(r≤n)r(r \leq n)r(r≤n)个元素排成一组(不考虑元素先后顺序)。组合与元素的顺序无关。
Cnm=PnmPm=n!m!(n−m)!,Cn0=1C_n^m = \frac{P_n^m}{P_m} = \frac{n!}{m!(n-m)!},C_n^0 = 1 Cnm=PmPnm=m!(n−m)!n!,Cn0=1
例子:A,B,C三名工人共有{A,B}、{A,C}、{B,C}\{A,B\}、\{A,C\}、\{B,C\}{A,B}、{A,C}、{B,C} 3种搭配方式。
代码输出所有组合方式
/*** 组合选择(从列表中选择n个组合)* @param dataList 待选列表* @param n 选择个数*/public static <AnyType extends Comparable<? super AnyType>> void combinationSelect(AnyType[] dataList, int n, List<AnyType[]> result) {combinationSelect(dataList, 0, (AnyType[])new Comparable[n], 0,result);}/*** 组合选择* @param dataList 待选列表* @param dataIndex 待选开始索引* @param resultList 前面(resultIndex-1)个的组合结果* @param resultIndex 选择索引,从0开始*/private static <AnyType extends Comparable<? super AnyType>> void combinationSelect(AnyType[] dataList, int dataIndex, AnyType[] resultList, int resultIndex, List<AnyType[]> result) {int resultLen = resultList.length;int resultCount = resultIndex + 1;if (resultCount > resultLen) { // 全部选择完时,输出组合结果AnyType[] temps = (AnyType[]) new Comparable[resultLen];System.arraycopy(resultList, 0, temps, 0, resultList.length);result.add(temps);
// System.out.println(Arrays.asList(temps));return;}// 递归选择下一个for (int i = dataIndex; i < dataList.length + resultCount - resultLen; i++) {resultList[resultIndex] = dataList[i];combinationSelect(dataList, i + 1, resultList, resultIndex + 1,result);}}
java 实现排列组合输出相关推荐
- java 字符串排列组合_Java 程序计算列出字符串的所有排列组合
Java 程序计算列出字符串的所有排列组合 在此示例中,我们将学习计算Java中字符串的所有排列组合. 要理解此示例,您应该了解以下Java编程主题: 字符串的排列是指可以通过互换字符串字符的位置来形 ...
- java数组排列组合_java算法题--递归求数组中数字排列组合问题
java算法题–递归求数组中数字排列组合问题 题目:有一个数组{1,2,3},输出数组中数字的所有可能组合: 比如:123.132.213- 解题思路 通过递归不停的交换数组中的两个数(当然,肯定是有 ...
- java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例
本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...
- 算法笔记—02:Java实现排列组合
排列的计算公式: 组合的计算公式 根据上面公式可知,所以求排列组合可以采用求阶乘的方法实现: 阶乘的实现: /*** 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1 */pri ...
- java实现排列组合算法
组合算法 网上已经能够搜索到比较多的资料,大部分都是递归实现,因为递归实现是最优解,而且代码易于理解,递归实现可以参考这篇博客:组合算法Java实现_freedom__bird的博客-C ...
- java字符串排列组合算法
前言 你的努力,终将成就无可替代的自己 本科毕业后就一直从事Java开发的工作,和多数人一样,最开始从事crud的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态. ...
- 数列的组合及排列方式java_java数组排列组合
⑥ 对于正面考虑太复杂的问题,可以考虑反面. ⑦ 对于一些排列数与组合数的问题,需要构造模型. 典例分析排列数组合数的简单计算 [例1] 对于满足 n ≥ 13 的正...... Java 实现排列组 ...
- EXCEL 把几列排列组合列出所有排列组合情况的绿色工具
对于如下问题: EXCEL 利用排列组合公式列出所有排列组合情况 在excel中如何实现第一列和第二列排列组合,输出到第三列 使用这个工具:http://www.excelfb.com/ 点击: 排列 ...
- 排列组合(Java随笔)—全排列
全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. 公式:全排列数f(n)=n!(定义0!=1)(也 ...
- JAVA练习177-有重复字符串的排列组合
有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输出:["eqq","qeq", ...
最新文章
- Python自动生成企业合同
- ubuntu18安装pytorch-gpu,一行conda命令安装,不需要单独安装cuda
- poj 3233 Matrix Power Series
- javaserver_什么是JavaServer Faces(JSF)–(第2部分)
- FZU 1924——死锁——————【topo判环】
- React第一天(尚硅谷视频)
- 一维卷积神经网络原理,卷积神经网络原理简述
- java SE的内容有什么_JavaSE包含哪些内容?JavaEE呢?
- 华为近场通讯nfc在哪里打开_华为手机nfc感应区在手机哪个位置
- html中账号绑定怎么做,绑定账号.html
- loadrunner11.0 安装 破解
- 接口做的好怎么形容_9个色彩搭配网站,没当过设计师也能做好配色了
- android app锁屏后定位,如何能让app在锁屏后还继续发送定位请求继续运行程序
- ERP和SAP是什么意思?(转载)
- 【AltiumDesigner专栏】01.05——ECAD-MCAD(一)
- 食堂老板给北大教授上的MBA课
- 2020.12.12-参加YMO青少年奥林匹克数学竞赛复赛(一等奖)
- 谷歌眼镜开发Mirror API之Java开发
- Android系统语言列表
- 【python数据分析】数据建模之 PCA主成分分析