import java.util.Stack;

/**

* 数学排列公式工具类

*/

public class ArrangementUtil {

public static Stack stack = new Stack();

private static int count = 0;

public static void main(String[] args) {

int array[] = {1, 2, 3, 4};

combine(array, 3, 0, 0); // 从这个数组4个数中选择三个

System.out.println("组合次数:" + ArrangementUtil.count);

}

/**

* @param array 元素

* @param toPickNum 要选多少个元素

* @param selectedNum 当前有多少个元素

* @param currentIndex 当前选到的下标

*/

private static void combine(int[] array, int toPickNum, int selectedNum, int currentIndex) {

if (selectedNum == toPickNum) {

System.out.println(stack);

ArrangementUtil.count++;

return;

}

for (int i = currentIndex; i < array.length; i++) {

if (!stack.contains(array[i])) {

stack.add(array[i]);

combine(array, toPickNum, selectedNum + 1, 0);

stack.pop();

}

}

}

}

=========================

import java.util.Stack;

/**

* 数学组合公式工具类

*/

public class CombinationUtil {

public static Stack stack = new Stack();

private static int count = 0;

public static void main(String[] args) {

int array[] = {1, 2, 3, 4, 5};

// int array[] = {1, 2, 3, 4};

combine(array, 3, 0, 0); // 从这个数组5个数中选择三个

System.out.println("组合次数:" + CombinationUtil.count);

}

/**

* @param array 元素

* @param toPickNum 要选多少个元素

* @param selectedNum 当前有多少个元素

* @param currentIndex 当前选到的下标

*/

private static void combine(int[] array, int toPickNum, int selectedNum, int currentIndex) {

if (selectedNum == toPickNum) {

System.out.println(stack);

CombinationUtil.count++;

return;

}

for (int i = currentIndex; i < array.length; i++) {

if (!stack.contains(array[i])) {

stack.add(array[i]);

combine(array, toPickNum, selectedNum + 1, i);// 和排列公式唯一的的区别在于此处,排列算法此处的i为0,因为排列是有序的

stack.pop();

}

}

}

}

=================================================================================================================

第一个问题:

首先,先让我们来看第一个问题, 有1,2,3,4这4个数字.可以重复的在里面选4次,问能得到多少种结果.easy

1  1  1  1

1  1  1  2

1  1  1  3

1  1  1  4

1  1  2  1

1  1  2  2

.......

4  4  4  3

4  4  4  4

代码实现其实也很简单,大家可以看下代码,理解一下,再自己敲一下,应该可以很快敲出来

输出:

得到了想要的结果,此处结果又很多种4*4*4*4 = 256种结果。

第二个问题:

同理,  问题来了,这时候有点排列组合的意思了 1,2,3,4排列要的到的是

有没有发现要的到排列的情况,这里stack里的元素是1,2,3,4都不能重复

那么我在入栈的时候加个判断,如果比如1,已经在stack里面了,就不加进去,就不会得到  1   1  1  1 ...的情况了,就得到了排列

输出:

这就是想要的排列结果了..   4 * 3 * 2 * 1 = 24种结果。

第三个问题:

那么组合问题来了,在1,2,3,4,中选3个有多少种组合方式

输出:

Java 计算排列_java如何进行排列组合运算相关推荐

  1. java使用数学公式_java Math类数学公式运算

    java Math类数学公式运算.Math类 java提供了基本的+,-,*,/算数运算符,同时也提供了更复杂的运算符,比如三角函数,对数元,指数运算 Math是一个工具类.它的构造器被定义为priv ...

  2. java 计算协方差_Java的深度:通过协方差暴露的API泄漏

    java 计算协方差 Java有时可能非常棘手,特别是在API设计中. 让我们看一个非常有趣的展示柜. jOOQ强烈地将API与实现分开. 所有API都在org.jooq包中,并且是公共的. 大多数实 ...

  3. [转载] java 计算协方差_Java的深度:通过协方差暴露的API泄漏

    参考链接: 关于Java中null的有趣事实 java 计算协方差 Java有时可能非常棘手,特别是在API设计中. 让我们看一个非常有趣的展示柜. jOOQ强烈地将API与实现分开. 所有API都在 ...

  4. java 计算时差_java计算时间差的几种方法

    用JAVA计算日期,时间差的几种方法 1. 手工计算 2.采用一个三方的jar包(Joda time library) 3. 利用TimeUnit类(java.util.concurrent 包中) ...

  5. java计算时间差_java中计算两个时间差

    java计算时间差及比较时间大小 比如:现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方 ...

  6. java 计算反码_java基础知识-原码、反码、补码、运算符

    一.原码.反码.补码 原码 一个数转化成二进制. 用最高位来表示正负,最高位为0表示正数,最高位为1表示负数. 例如: short i=5: 因为在java里short占2个字节转化成二进制就是 00 ...

  7. java 计算九宫格_Java计算手机九宫格锁屏图案连接9个点的方案总数

    (一)问题 九宫格图案解锁连接9个点共有多少种方案? (二)初步思考 可以把问题抽象为求满足一定条件的1-9的排列数(类似于"八皇后问题"),例如123456789和9876543 ...

  8. java计算距离_java实现计算地理坐标之间的距离

    java实现计算两经纬度点之间的距离,直接上代码,具体解释请参考注释 package com.jttx.poi.utils; import com.jttx.poi.entity.point; /** ...

  9. java 聚合模式_java 聚合和组合的区别?

    展开全部 组合:部分与整体是与生俱来的,部分的存在依赖于整体.比e69da5e6ba903231313335323631343130323136353331333365646232如人与人的某个器官, ...

  10. java计算工龄_java计算工龄

    计算工龄原则:若是2000-10-12作为开始工作时间,则到下一年的2001-10-13算为一年.有个bug,不满一年的工龄是错误的. import java.util.Date; import ja ...

最新文章

  1. 教程:9、网络通信工具
  2. Linux-RHEL5-初学者配置vsftpd注意事项
  3. 什么是真正的高清,你知道吗?
  4. java 提交界面_使用javascript如何实现页面加载时自动提交表单
  5. php页面的特点_带你认识PHP的四大特性八大优势
  6. Android BlueDroid(三):BlueDroid蓝牙开启过程enable
  7. jquery操作li向下向上几行
  8. 计算机组装有哪些,DIY电脑组装需要哪些东西
  9. MFI认证——什么是苹果MFI认证
  10. 软件开发工具的使用与开发
  11. azkaban短信报警功能和项目依赖功能实现
  12. checkstyle 行内含有制表符tab,缩进符数量不正确
  13. 阿里云DDoS防护和DDoS高防有什么区别
  14. 几行Python代码画皮卡丘
  15. 使用Google表格进行网页抓取
  16. 如何查询以太信道接口_查询区块
  17. 朴素贝叶斯--过滤垃圾邮件实例
  18. 这套系统,可能真的是数据分析师们未来5年的机遇!
  19. 健康上链——医疗健康行业数字化转型的关键路径|链塔智库
  20. 使用tftpd32搭建PXE服务器——从FTP服务器下载内核及INITRD文件

热门文章

  1. CentOS7设置console口能连接
  2. 简单教你提高网站速度的6种小方法
  3. 2019校招阿里数据研发/数据挖掘三面总结
  4. 俄勒冈健康与科学大学计算机,GE 医疗合作俄勒冈健康与科学大学,赋能虚拟ICU...
  5. 、用ecshop整合淘宝客api改造用于淘宝客程序
  6. 小程序授权之支付宝(普通公钥)
  7. [Xcelsius]BI展现工具之Xcelsius
  8. 博客网站怎么做,怎样建立一个自己的网站
  9. vue下载sass依赖
  10. Cocos2dx中Lua游戏性能优化指南