java實現有條件字串全排列輸出
阿新 • • 發佈:2019-02-14
package edu.pku.ss.hlj; public class Hlj { public static void main(String[] args) { String s = "abcd";//這裡是要用到的所有陣列成的一個字串,其它字元同樣適用 char[] c = s.toCharArray(); new Hlj().fullPermutation(c,c.length,0); System.out.println("可能的組合數:"+kk); for(char ch : c){ System.out.print(ch +""); } } static int kk=0; /** * 不具字典順序的排列組合產生比較容易,使用一軸心將數字分為兩個部份,並將軸心左邊與右邊的數字依序交換,並繼續將軸心右邊進行遞迴,例如遞迴最上層的四個交換如下,!表示軸心: 1 ! 2 3 4 - > 將軸心右邊進行遞迴 2 ! 1 3 4 - > 將軸心右邊進行遞迴 3 ! 2 1 4 - > 將軸心右邊進行遞迴 4 ! 2 3 1 - > 將軸心右邊進行遞迴 * @param array * @param n * @param k */ private void fullPermutation(char[] array, int n, int k) { if (n == k) { // if(array[2]!='4'){//第三個位置不能出現4 // String str = new String(array); // if(str.indexOf("53")<0&&str.indexOf("35")<0){//3,5不能連續出現 // System.out.println(str); // ++kk; // } // } // String str = new String(array); System.out.println(array); ++kk; } else { for (int i = k; i < n; i++) { swap(array, k, i); fullPermutation(array, n, k + 1); swap(array, i, k); } } } private void swap(char[] a, int x, int y) { char temp = a[x]; a[x] = a[y]; a[y] = temp; } }