Java字符串排列算法


Java字符串排列算法

 

  題目:現有ABCDE 5個球 構成的排列組合 可重復抽取 最多取到16個 共有多少種組合方式?

  比如:取1個球可以構成的組合有 A B C D E 共5種,取2個球可以構成的組合有  5+4+3+2+1=15種 (BA 和 AB 這種重復的排列 算成一種)

    AA AB AC AD AE

    BB BC BD BE

    CC CD CE

    DD DE

    EE

  取 3 個球可以構成的組合是 (5+4+3+2+1)+(4+3+2+1)+(3+2+1)+(2+1)+1= 35種

    AAA AAB AAC AAD AAE

    ABB ABC ABD ABE

    ACC ACD ACE

    ADD ADE

    AEE

 

    BBB BBC BBD BBE

    BCC BCD BCE

    BDD BDE

    BEE

 

    CCC CCD CCE

    CDD CDE

    CEE

 

    DDD DDE

    DEE

 

    EEE

 

  程序代碼示例:

 1 import java.util.Scanner;  2 
 3 /**
 4  * 主要是利用遞歸來來實現。主要思想是把一個字符串分為倆段來處理,首先取出第一個字符串,然后用后面的字符來與它進行拼湊。  5  */
 6 public class Zuhe {  7     private static String str = "ABCDE";// 字符串
 8     private static int n = 3;// 選擇的個數
 9     private static int count = 0;//組合的個數
10 
11     public static void main(String[] args) { 12         new Zuhe(); 13  } 14 
15     public Zuhe() { 16         Scanner input = new Scanner(System.in); 17         System.out.println("請輸入要選擇的個數(要少於" + str.length() + "個)"); 18         n = Integer.parseInt(input.nextLine()); 19         find("", 0); 20         System.out.println("共有"+count+"種組合"); 21 
22  } 23     /**
24  *第一個參數是代表第一個字符,第二個參數代表開始尋找點的位置 25      */
26     public static void find(String s, int i) { 27         // 保存上一次的字符串
28         String temp = s; 29         //判斷是否符合要求
30         if (s.length() == n) { 31             count++; 32 
33             System.out.print(s + " "); 34             if (count % 10 == 0) 35  System.out.println(); 36             return; 37  } 38         //從尋找點開始循環,風之境地
39         for (int k =i; k < str.length(); k++) { 40             s = temp; 41             s += str.charAt(k); 42  find(s, k); 43  } 44  } 45 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM