排列数

排列数基本概念

  排列数指的是从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​=Pm​Pnm​​=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 实现排列组合输出相关推荐

  1. java 字符串排列组合_Java 程序计算列出字符串的所有排列组合

    Java 程序计算列出字符串的所有排列组合 在此示例中,我们将学习计算Java中字符串的所有排列组合. 要理解此示例,您应该了解以下Java编程主题: 字符串的排列是指可以通过互换字符串字符的位置来形 ...

  2. java数组排列组合_java算法题--递归求数组中数字排列组合问题

    java算法题–递归求数组中数字排列组合问题 题目:有一个数组{1,2,3},输出数组中数字的所有可能组合: 比如:123.132.213- 解题思路 通过递归不停的交换数组中的两个数(当然,肯定是有 ...

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

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

  4. 算法笔记—02:Java实现排列组合

    排列的计算公式: 组合的计算公式 根据上面公式可知,所以求排列组合可以采用求阶乘的方法实现: 阶乘的实现: /*** 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1 */pri ...

  5. java实现排列组合算法

    组合算法 网上已经能够搜索到比较多的资料,大部分都是递归实现,因为递归实现是最优解,而且代码易于理解,递归实现可以参考这篇博客​​​​​​​:组合算法Java实现_freedom__bird的博客-C ...

  6. java字符串排列组合算法

    前言 你的努力,终将成就无可替代的自己 本科毕业后就一直从事Java开发的工作,和多数人一样,最开始从事crud的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态. ...

  7. 数列的组合及排列方式java_java数组排列组合

    ⑥ 对于正面考虑太复杂的问题,可以考虑反面. ⑦ 对于一些排列数与组合数的问题,需要构造模型. 典例分析排列数组合数的简单计算 [例1] 对于满足 n ≥ 13 的正...... Java 实现排列组 ...

  8. EXCEL 把几列排列组合列出所有排列组合情况的绿色工具

    对于如下问题: EXCEL 利用排列组合公式列出所有排列组合情况 在excel中如何实现第一列和第二列排列组合,输出到第三列 使用这个工具:http://www.excelfb.com/ 点击: 排列 ...

  9. 排列组合(Java随笔)—全排列

    全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. 公式:全排列数f(n)=n!(定义0!=1)(也 ...

  10. JAVA练习177-有重复字符串的排列组合

    有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1:  输入:S = "qqe"  输出:["eqq","qeq", ...

最新文章

  1. Python自动生成企业合同
  2. ubuntu18安装pytorch-gpu,一行conda命令安装,不需要单独安装cuda
  3. poj 3233 Matrix Power Series
  4. javaserver_什么是JavaServer Faces(JSF)–(第2部分)
  5. FZU 1924——死锁——————【topo判环】
  6. React第一天(尚硅谷视频)
  7. 一维卷积神经网络原理,卷积神经网络原理简述
  8. java SE的内容有什么_JavaSE包含哪些内容?JavaEE呢?
  9. 华为近场通讯nfc在哪里打开_华为手机nfc感应区在手机哪个位置
  10. html中账号绑定怎么做,绑定账号.html
  11. loadrunner11.0 安装 破解
  12. 接口做的好怎么形容_9个色彩搭配网站,没当过设计师也能做好配色了
  13. android app锁屏后定位,如何能让app在锁屏后还继续发送定位请求继续运行程序
  14. ERP和SAP是什么意思?(转载)
  15. 【AltiumDesigner专栏】01.05——ECAD-MCAD(一)
  16. 食堂老板给北大教授上的MBA课
  17. 2020.12.12-参加YMO青少年奥林匹克数学竞赛复赛(一等奖)
  18. 谷歌眼镜开发Mirror API之Java开发
  19. Android系统语言列表
  20. 【python数据分析】数据建模之 PCA主成分分析

热门文章

  1. 网络文件共享服务(一)
  2. 在哪里能看到计算机缓存大小,怎么查看电脑硬盘缓存大小
  3. [杜撰的故事]那天以后
  4. mongoDB 4.0 开启远程访问
  5. 轻松升级各路硬件,简约时尚的大容量机箱,TT挑战者H6上手
  6. s3c2440存储控制器详解
  7. 浏览器主页被修改的解决方案
  8. Visual studio之C#的一些常见问题
  9. 选择器的权重中对交集选择器,分组(并集)选择器,以及关系选择器的理解
  10. CSS学习18:CSS选择器二