import java.util.Arrays;

//利用二进制算法进行全排列

//count1:170187

//count2:291656

public class test {

public static void main(String[] args) {

long start=System.currentTimeMillis();

count2();

long end=System.currentTimeMillis();

System.out.println(end-start);

}

private static void count2(){

int[] num=new int []{1,2,3,4,5,6,7,8,9};

for(int i=1;i

String str=Integer.toString(i,9);

int sz=str.length();

for(int j=0;j<9-sz;j++){

str="0"+str;

}

char[] temp=str.toCharArray();

Arrays.sort(temp);

String gl=new String(temp);

if(!gl.equals("012345678")){

continue;

}

String result="";

for(int m=0;m

result+=num[Integer.parseInt(str.charAt(m)+"")];

}

System.out.println(result);

}

}

public static void count1(){

int[] num=new int []{1,2,3,4,5,6,7,8,9};

int[] ss=new int []{0,1,2,3,4,5,6,7,8};

int[] temp=new int[9];

while(temp[0]<9){

temp[temp.length-1]++;

for(int i=temp.length-1;i>0;i--){

if(temp[i]==9){

temp[i]=0;

temp[i-1]++;

}

}

int []tt=temp.clone();

Arrays.sort(tt);

if(!Arrays.equals(tt,ss)){

continue;

}

String result="";

for(int i=0;i

result+=num[temp[i]];

}

System.out.println(result);

}

}

}

一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用

二.用递归的思想来求排列跟组合,代码量比较大

package practice;

import java.util.ArrayList;

import java.util.List;public classTest1 {/**

* @param args*/

public static voidmain(String[] args) {//TODO Auto-generated method stub

Object[] tmp={1,2,3,4,5,6};//ArrayList rs=RandomC(tmp);

ArrayList rs=cmn(tmp,3);for(int i=0;i

{//System.out.print(i+"=");

for(int j=0;j

{

System.out.print(rs.get(i)[j]+",");

}

System.out.println();

}

}//求一个数组的任意组合

static ArrayListRandomC(Object[] source)

{

ArrayList result=new ArrayList();if(source.length==1)

{

result.add(source);

}else{

Object[] psource=new Object[source.length-1];for(int i=0;i

{

psource[i]=source[i];

}

result=RandomC(psource);int len=result.size();//fn组合的长度

result.add((new Object[]{source[source.length-1]}));for(int i=0;i

{

Object[] tmp=new Object[result.get(i).length+1];for(int j=0;j

{

tmp[j]=result.get(i)[j];

}

tmp[tmp.length-1]=source[source.length-1];

result.add(tmp);

}

}returnresult;

}static ArrayList cmn(Object[] source,intn)

{

ArrayList result=new ArrayList();if(n==1)

{for(int i=0;i

{

result.add(newObject[]{source[i]});

}

}else if(source.length==n)

{

result.add(source);

}else{

Object[] psource=new Object[source.length-1];for(int i=0;i

{

psource[i]=source[i];

}

result=cmn(psource,n);

ArrayList tmp=cmn(psource,n-1);for(int i=0;i

{

Object[] rs=newObject[n];for(int j=0;j

{

rs[j]=tmp.get(i)[j];

}

rs[n-1]=source[source.length-1];

result.add(rs);

}

}returnresult;

}

}

三.利用动态规划的思想求排列和组合

packageAcm;//强大的求组合数

public classMainApp {public static voidmain(String[] args) {int[] num=new int[]{1,2,3,4,5};

String str="";//求3个数的组合个数//count(0,str,num,3);//求1-n个数的组合个数

count1(0,str,num);

}private static void count1(int i, String str, int[] num) {if(i==num.length){

System.out.println(str);return;

}

count1(i+1,str,num);

count1(i+1,str+num[i]+",",num);

}private static void count(int i, String str, int[] num,intn) {if(n==0){

System.out.println(str);return;

}if(i==num.length){return;

}

count(i+1,str+num[i]+",",num,n-1);

count(i+1,str,num,n);

}

}

下面是求排列

packageAcm;//求排列,求各种排列或组合后排列

importjava.util.Arrays;importjava.util.Scanner;public classDemo19 {private static booleanf[];public static voidmain(String[] args) {

Scanner sc=newScanner(System.in);int sz=sc.nextInt();for(int i=0;i

f=new boolean[sum];

Arrays.fill(f,true);int[] num=new int[sum];for(int j=0;j

num[j]=j+1;

}int nn=sc.nextInt();

String str="";

count(num,str,nn);

}

}/***

*@paramnum 表示要排列的数组

*@paramstr 以排列好的字符串

*@paramnn 剩下需要排列的个数,如果需要全排列,则nn为数组长度*/

private static void count(int[] num, String str, intnn) {if(nn==0){

System.out.println(str);return;

}for(int i=0;i

}

f[i]=false;

count(num,str+num[i],nn-1);

f[i]=true;

}

}

}

java 排列组合算法_关于各种排列组合java算法相关推荐

  1. Python_机器学习_算法_第1章_K-近邻算法

    Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...

  2. java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...

  3. weka java 分类算法_使用Weka快速实践机器学习算法

    [译者注]在当下人工智能火爆发展的局面,每时每刻都有新的技术在诞生,但如果你是一个新手,Weka或许能帮助你直观.快速的感受机器学习带来的解决问题的新思路. Weka使机器学习的应用变得简单.高效并且 ...

  4. mysql join 算法_【MySQL】之join算法详解

    在阿里巴巴的java开发手册有这么一条强制规定:超过三个表禁止join,需要join的字段,数据类型保持绝对一致,多表关联查询时,要保证被关联的字段需要有索引. 为什么尽量避免使用join?如果使用j ...

  5. ++代码实现 模糊综合算法_干货 | 十大经典排序算法最强总结(内含代码实现)...

    一.算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决定元 ...

  6. pcy 算法_大数据分析中的PCY算法

    pcy 算法 PCY algorithm was developed by three Chinese scientists Park, Chen, and Yu. This is an algori ...

  7. 错误录入 算法_如何使用验证错误率确定算法输出之间的关系

    错误录入 算法 Monument (www.monument.ai) enables you to quickly apply algorithms to data in a no-code inte ...

  8. 利用python语言实现分类算法_使用python实现kNN分类算法

    k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很 ...

  9. java面试题成都_成都汇智动力-java面试——多线程面试题

    原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...

  10. java+cas实现类_像宝石一样的Java原子类-基于CAS实现

    主要内容 1. 线程同步标准的处理方法:上锁 2. 锁的问题 3. 硬件同步原语CAS 4. 使用CAS实现计数器 5. Lock-free和 wait-free 算法 6. Atomic原子变量类 ...

最新文章

  1. 个人技术生涯的感悟(2)
  2. 从看见到听见,机器人传感能否解决智能制造检测的最后一公里难题?
  3. 7.13 T2 Shit 题(shit)
  4. 面向过程和面向对象的区别
  5. 9种蔬菜吃不对胜似砒霜
  6. NYOJ 139 我排第几个?
  7. Quicker--文件搜索工具介绍
  8. 计算机二级access选择题题库_资料最新计算机二级题库,选择题资料汇总+全真试题分享(Office)...
  9. 更改apk安装包对android系统等级要求
  10. VUE:兄弟组件间传参
  11. 数据库中存储过程和触发器有什么异同?
  12. 从“谈芯”走向“用芯” RISC-V 未来前景光明?
  13. linux扩大lvm_Linux下lvm在线扩容步骤
  14. 单调队列(数列中长度不超过k的子序列和的最值)
  15. Adobe 强烈建议卸载:教你从 Win10 彻底删除 Flash
  16. 东大22春《马克思主义基本原理X》在线平时作业1_100分满分非答案
  17. 保护眼睛的颜色和各种背景颜色设置方法(转)
  18. greenplum创建外部表笔记-readable篇
  19. 微信公众号怎么上传资料?
  20. Teambition使用教程

热门文章

  1. 2021第十二届蓝桥杯国赛B组题解(C/C++)
  2. EAccessViolation型错误
  3. 2021寒假MISC打卡DAY1
  4. DH加密通信python实现
  5. PyTorch | torch.manual_seed(1)是什么意思?torch随机数manual_seed(1)有什么用?如何理解torch.manual_seed(1)
  6. 实习期间的一些思考整理(1)2018.4.8~4.9
  7. 金融企业如何构建有效的数据分析体系?1000+案例经验汇总
  8. 金凯瑞在马赫西管理大学毕业典礼的演讲
  9. Mac 下撰写文档时输入 command、option、control 等键盘符号的方法
  10. AutoCAD2014下载和安装教程(官方中文完整版)