Java 排列组合_c语言排列组合函数

Java 排列组合_c语言排列组合函数importjava.util.Arrays;//利用二进制算法进行全排列//count1:170187//count2:291656publicclasstest{publicstaticvoidmain(String[]args){longstart=System.currentTimeMillis();count2();longend=System.currentTim…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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;

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179096.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java转大数据的学习路线

    java转大数据的学习路线首先这个文章是转载的,留着后面基础再扎实一点之后开始学习,感谢原文的作者,写出了如此清晰的学习路线。原文作者文章链接:https://blog.csdn.net/gitchat/article/details/78341484【不要错过文末彩蛋】申明:本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的大数据技术学习路径,不适用于大数据工程师的进阶学习,也不适用于零编程基础的同…

    2022年6月10日
    31
  • CE修改器使用教程 [基础篇]

    CheatEngine一般简称CE,是一个开放源代码的作弊软件,其功能包括:内存扫描、十六进制编辑器、调试工具,CheatEngine自身附带了外挂制作工具,可以用它直接生成外挂工具,CE可以说是目前最优秀的游戏修改器不是之一,这个工具绝对值得你去学习(只要花一点时间就够了)。本篇文章只是转载内容,后期将会以一些单机游戏为重点,讲解飞天,蹲地,无敌,秒杀,等功能的实现,更多实战教程敬请…

    2022年4月3日
    653
  • 创建scrapy项目_项目构建是什么意思

    创建scrapy项目_项目构建是什么意思构建项目:scrapystartprojecttaobao创建一个爬虫:scrapygenspider爬虫名称要爬取的限制域

    2025年9月13日
    5
  • emwin用户设置界面_强制刷新快捷键

    emwin用户设置界面_强制刷新快捷键1、在对话框回调函数中定时重绘按键_cbDialogHome(WM_MESSAGE*pMsg){ Switch(pMsg->MsgId){ CaseWM_INIT_DIALOG: WM_CreateTimer(pMsg->hWin,0,100,0);//创建窗口定时器 CaseWM_PAINT://窗口重绘 CaseWM_NOTIFY_

    2022年10月15日
    2
  • 偏态分布学习笔记(期望,中位数,众数)

    偏态分布学习笔记(期望,中位数,众数)一:偏态函数分类(1)正态(期望=中位数=众数)(2)正偏态:也称为右偏态(期望>中位数>众数)(3)负偏态:也称左偏态(期望<中位数<众数)二:如何辨认正负偏态函数关键:看尾巴哪边长,左边尾巴长的成为左偏态(负偏态),反之右偏态(正偏态)三:关于期望,中位数,众数参考上面的草图:可以这样理解,(1)对于正偏态而言,数据大多分布在右侧,从而也就把期望与中位数往右侧移动。(2)对于负偏态而言,数据大多分布在左侧,从而也就把期望与中位数往左侧移动。…

    2025年11月12日
    4
  • 详解如何在vue项目中使用layui框架及采坑

    详解如何在vue项目中使用layui框架及采坑根据官网的文档,要在一个html文件下使用layui里面的组件库其实很简单,但是在vue项目中使用该ui库却存在着很多坑,下面我们就详细讲解一下如何在vue-cli搭建的项目下使用layui1.第一个坑:vue项目中使用npm安装引入时报错(目前并没有找到引入的合适的方式,知道的可以留言探讨)在官网中我们可以看到他提到支持npm安装,但是当我们安装成功后,在main.js中引入时却报并不能…

    2022年6月25日
    92

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号