花了一中午終於理解了!
第一種情況: 1 2 3 4 無重複字元
每次固定第乙個 然後剩餘的在進行全排
1-234
2-134
3-214
4-231
接下來:
234重排
2-34
3-24
4-32
其他都一樣了
直接上**
public class main else
} }private static char swap(char s, int start, int i)
public static void main(string args) ;
p(s,0,4);
}}
第二種情況: 1 2 2 4 含重複 即當我們一交換過就不交換了
public class main else
} }
/*** 嘉策是否已經被交換過 即是否為重複字元
* @param s 字元陣列
* @param start 開始
* @param i 結束
* @return true 沒有交換過 false 交換過
*/private static boolean isswap(char s, int start, int i)
} return true;
} private static char swap(char s, int start, int i)
public static void main(string args) ;
p(c,0,4);
}}
這裡的時候執行時間複雜度較高 在pat poj 上執行的時候可能會超時
我們進行如下優化:
public class main else
} }
private static char swap(char s, int start, int i)
public static void main(string args) ;
p(s,0,4);
system.out.println("****************************************");
//有重複
char c = ;
p(c,0,4);
}}
希望對你們理解有幫助!!
java全排列演算法
遞迴全排列 以num 1,2,3,4,5 為例 1.f1 0,num 2.i 0 i 4遞迴到最後乙個元素,輸出1 2 3 4 5 3.i 4 i 3交換4 5,i 3 i 4,輸出1 2 3 5 4 4.i 4 i 3,5 4換回來,for迴圈完畢,返回上一層 5.i 3 i 2 交換3 4,i ...
java演算法筆記 全排列
全排列核心操作就是交換與遞迴 1 交換 交換遍歷到的兩個數,使第一次選出不同的數。2 遞迴進入下一層排列下一層,結束條件是方法的index指標等於arr.length 1時列印排列好的陣列,結束遞迴 3 再次交換第一步交換的兩個數,還原陣列狀態。回溯法 package 全排列 public clas...
全排列 全錯排
全排列 即線性代數中的全排列 eg 123 132 213 231 312 321 如八皇后問題上可轉化為全排列篩選出abs a i a j abs i j 即為總數。c 全排列函式next permutation first,last 可將陣列或容器生成全排列 int a 3 dowhile ne...