字串全排列 java實現

bitcarmanlee發表於2016-06-01

經常會遇到字串全排列的問題。例如:輸入為{‘a’,’b’,’c’},則其全排列組合為abc,acb,bac,bca,cba,cab。對於輸入長度為n的字串陣列,全排列組合為n!種。

思路:從字串陣列中每次選取一個元素,作為結果中的第一個元素。然後,對剩餘的元素全排列,步驟跟上面一樣。很明顯這是個遞迴處理的過程,一直到最後即可。

按照慣例,talk is cheap,show me the code:

package leilei.bit.edu.tree;

public class RecursionTree {

    public static void permutation(char[] s,int from,int to) {
        if(to <= 1)
            return;
        if(from == to) {
            System.out.println(s);
        } else {
            for(int i=from; i<=to; i++) {
                swap(s,i,from); //交換字首,使其產生下一個字首
                permutation(s, from+1, to);
                swap(s,from,i); //將字首換回,繼續做上一個字首的排列
            }
        }
    }

    public static void swap(char[] s,int i,int j) {
        char tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
    }

    public static void main(String[] args) {
        char[] s = {'a','b','c'};
        permutation(s, 0, 2);
    }

}

程式碼執行結果

abc
acb
bac
bca
cba
cab

相關文章