<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java算法實現排列組合的方法介紹

    時間:2025-11-01 15:40:16 java語言 我要投稿

    java算法實現排列組合的方法介紹

      一.利用二進制狀態法求排列組合,此種方法比較容易懂,但是運行效率不高,小數據排列組合可以使用代碼如下:

      import java.util.Arrays;

      /pic/p>

      /pic/p>

      /pic/p>

      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<Math.pow(9, 9);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<str.length();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<num.length;i++){

      result+=num[temp[i]];

      }

      System.out.println(result);

      }

      }

      }

      二.用遞歸的思想來求排列跟組合,代碼量比較大代碼如下:

      package practice;

      import java.util.ArrayList;

      import java.util.List;

      public class Test1 {

      /**

      * @param args

      */

      public static void main(String[] args) {

      /pic/p>

      Object[] tmp={1,2,3,4,5,6};

      /pic/p>

      rs=RandomC(tmp);

      ArrayList

      rs=cmn(tmp,3);

      for(int i=0;i<rs.size();i++)

      {

      /pic/p>

      for(int j=0;j<rs.get(i).length;j++)

      {

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

      }

      System.out.println();

      }

      }

      /pic/p>

      static ArrayList

      RandomC(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.length;i++)

      {

      psource[i]=source[i];

      }

      result=RandomC(psource);

      int len=result.size();/pic/p>

      result.add((new Object[]{source[source.length-1]}));

      for(int i=0;i<len;i++)

      {

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

      for(int j=0;j<tmp.length-1;j++)

      {

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

      }

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

      result.add(tmp);

      }

      }

      return result;

      }

      static ArrayList

      cmn(Object[] source,int n)

      {

      ArrayList

      result=new ArrayList

      ();

      if(n==1)

      {

      for(int i=0;i<source.length;i++)

      {

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

      }

      }

      else if(source.length==n)

      {

      result.add(source);

      }

      else

      {

      Object[] psource=new Object[source.length-1];

      for(int i=0;i<psource.length;i++)

      {

      psource[i]=source[i];

      }

      result=cmn(psource,n);

      ArrayList

      tmp=cmn(psource,n-1);

      for(int i=0;i<tmp.size();i++)

      {

      Object[] rs=new Object[n];

      for(int j=0;j<n-1;j++)

      {

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

      }

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

      result.add(rs);

      }

      }

      return result;

      }

      }

      三.利用動態規劃的思想求排列和組合 代碼如下:

      package Acm;

      /pic/p>

      public class MainApp {

      public static void main(String[] args) {

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

      String str="";

      /pic/p>

      /pic/p>

      /pic/p>

      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,int n) {

      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);

      }

      }

      下面是求排列代碼如下:

      package Acm;

      /pic/p>

      import java.util.Arrays;

      import java.util.Scanner;

      public class Demo19 {

      private static boolean f[];

      public static void main(String[] args) {

      Scanner sc=new Scanner(System.in);

      int sz=sc.nextInt();

      for(int i=0;i<sz;i++){

      int sum=sc.nextInt();

      f=new boolean[sum];

      Arrays.fill(f, true);

      int[] num=new int[sum];

      for(int j=0;j<sum;j++){

      num[j]=j+1;

      }

      int nn=sc.nextInt();

      String str="";

      count(num,str,nn);

      }

      }

      /**

      *

      * @param num 表示要排列的數組

      * @param str 以排列好的字符串

      * @param nn 剩下需要排列的個數,如果需要全排列,則nn為數組長度

      */

      private static void count(int[] num, String str, int nn) {

      if(nn==0){

      System.out.println(str);

      return;

      }

      for(int i=0;i<num.length;i++){

      if(!f[i]){

      continue;

      }

      f[i]=false;

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

      f[i]=true;

      }

      }

      }

    【java算法實現排列組合的方法介紹】相關文章:

    權重隨機算法的java實現03-11

    冒泡排序算法原理及JAVA實現代碼方法09-26

    Java基于余弦方法實現的計算相似度算法示例02-10

    java通用組合算法如何實現10-04

    JAVA簡單選擇排序算法及實現02-10

    如何實現java漢諾塔遞歸算法09-05

    KMP算法的C#實現方法12-15

    關于Java動態實現的方法12-04

    Java實現多線程的方法11-26

    • 相關推薦
    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人