全排演算法 JAVA

2021-07-30 03:46:01 字數 1279 閱讀 8337

花了一中午終於理解了!

第一種情況: 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...