字符串全排列

package StringAllOrder;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;
/**
 * desc:
 * 		每次都把一個數固定在前面,讓後面的數遞歸地進行全排列,這樣每個數都固定過以後就能找出所有排列。
 * 		關鍵的地方在於,我們把每個數固定在前面並讓後面的進行全排列完畢以後,要恢復原來的狀態,也就需要交換回來。
 * 已經去掉重複。
 * @author 獵碼
 *
 */
public class Main {
 
    private static Set<String> set = new TreeSet<>();
 
    public static void main(String[] args) {
        String str = "1223";
        func(str.toCharArray(), 0);
        System.out.println(Arrays.toString(set.toArray()));
    }
    
    
    
    private static void func(char[] charArray, int start){
        if (start == charArray.length - 1){		//遞歸頭
            set.add(new String(charArray));		
        }else{
            for(int i = start; i <= charArray.length - 1; i ++){
                swap(charArray, start, i);
                func(charArray, start + 1);
                swap(charArray, start, i);
            }
        }
    }
    
    
    /*
     * 交換數值
     */
    private static void swap(char[] charArray, int i, int j){
        char temp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = temp;
    }
    
  
    
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章