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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 帧中继_帧中继交换机

    帧中继_帧中继交换机NBMA实验实验准备:1、 四台路由器,R2配置成帧中继交换机。2、 R1,R3,R4运行OSPF。实验配置:R1:interfaceLoopback0 ipad

    2022年8月3日
  • spring 笔记_spring实战pdf

    spring 笔记_spring实战pdfSpring实战1:Spring初探

    2022年4月21日
  • xshell的安装和使用_Xshell命令

    xshell的安装和使用_Xshell命令Xshell安装Xshell安装完后提示更新到最新版本

    2022年9月8日
  • MySQL集群架构[通俗易懂]

    MySQL集群架构[通俗易懂]本文知识点较多,篇幅较长,请耐心学习题记:文章内容输出来源:拉勾教育Java高薪训练营。本篇文章是MySQL学习课程中的一部分笔记。MySQL集群架构一、集群架构设计1、架构设计理念在集群架构设计时,主要遵从下面三个维度:可用性扩展性一致性2、可用性设计站点高可用,冗余站点服务高可用,冗余服务数据高可用,冗余数据保证高可用的方法是冗余。但是数据冗余带来的问题是数据一致性问题。实现高可用的方案有以下几种架构模式:主从模式简单灵活,能满足多种需求。比较主流的.

    2022年7月27日
  • 锂电池升压芯片[通俗易懂]

    锂电池升压芯片[通俗易懂]型号电池 数量工作 模式工作 电压最大 充电 电流工作 电流恒流 恒压 精度输出 电压开关 频率封装说明HM40331-5 节 可设PFM 升压型 开关式 外置MOS4.0V -28V扩流 最大 25W1.7mA1%可调1MHzSOT-26HM40312节5V升压型 开关式 外置MOS最大 5.5V1.0A 以上 可调5mA1%8.4V200KHzSOP-8自适应适配器的

    2022年10月7日
  • oracle的listagg函数_oracle的listagg函数

    oracle的listagg函数_oracle的listagg函数Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下:1,版本SQL>select*fromv$version;BANNER——————————————————————————–OracleDatabase11gEnterpris

    2022年9月6日

发表回复

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

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