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