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;

}

}

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jsp基础入门教程(自学素描基本入门教程)

    JSP 教程JSP与PHP、ASP、ASP.NET等语言类似,运行在服务端的语言。JSP(全称JavaServerPages)是由SunMicrosystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的Web网页的技术标准。JSP技术是以Java语言作为脚本语言的,JSP网页为整个服务器端的Java库单元提供了

  • 小米手机解BL锁教程

    小米手机解BL锁教程1.找到设置,找到我的设备2.点击全部参数,点miui版本,点3下。3.返回,找到更多设置4.找到开发者选项5.找到设备定状态6.绑定账号和设备,关机,按开键加音量减,进去fast模式,链接电脑。7. 电脑打开下载解锁工具:点击链接下载将解锁工具解压缩,点击unlock.exe。7.解锁工具里登入可解锁的小米账号,同时将手机进入fastboot模式(关机状态下长按音量下键和电源键),用数据线连接电脑,提示已连接手机即可,若没有驱动点击图标安装即可。8.设备已解锁-解锁成功

  • anaconda添加清华镜像源_anaconda清华镜像源

    anaconda添加清华镜像源_anaconda清华镜像源在安装tensorflow时,不知道怎么了,一直安装不上去,所以重新配置了下镜像安装环境:win10+anaconda3.5删除之前的镜像源,恢复默认状态condaconfig–remove-keychannels添加清华镜像源清华大学开源软件镜像站#添加镜像源condaconfig–addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/maincondaconfig–addchann

    2022年10月30日
  • linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]

    linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]需求描述:  今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少,  我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22,  在此做下记录.操作过程:1.使用sftp默认的端口号进行登录aiuap_cj@cuchc802:~>sftpaisftp@10.124.163.133aisftp@10.124.163.13…

  • c语言socket 释放,C语言socket编程

    c语言socket 释放,C语言socket编程8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?[codelanguage=”cpp”]structsockaddr{unsignedshortsa_family;charsa_data[14];};[/code]这是一个16字节大小的结构(2+14),sa_family可以认为是socketaddressfamily的缩写,也可能被简写成AF…

  • 深入剖析MSAA_MSA分析报告

    深入剖析MSAA_MSA分析报告本文打算对MSAA(Multisampleantialiasing)做一个深入的讲解,包括基本的原理、以及不同平台上的实现对比(主要是PC与Mobile)。为了对MSAA有个更好的理解,所以写下了

发表回复

您的电子邮箱地址不会被公开。

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