Java實現全排列、組合演算法
全排列
解法一:
輸入一串字元,然後對字元進行全排列,如“abc”,全排列結果為:”abc”,”acb”,”bac”,”bca”,”cab”,”cba”.
分析:從字串中選擇一個作為第一個字元,然後對剩下的字串進行全排列,如此遞迴下去,直到列印出全部排列。如:”abc”:
1、選a作為第一個字元:”abc“,”acb“;
2、選b作為第一個字元:”bac“,”bca“;
3、選c作為第一個字元:”cab“,”cba“;
參考程式碼如下:
遞迴實現全排列演算法
解法二:
這種解法是將字串從小大倒排序,以此得到整體的最小順,然後找到次小順序,直到得到最大順序,也就是從大到小的順序,如:”23415“,最小順序是:”12345″,次小順序是:”12354“,……..直到最大順序:”54321“。這裡重點是找到某個順序值得下一個順序。找下一個順序的演算法如下:假設到了”21543“,從後往前找到i-1位置小於i位置的下標,1<5,所以要找的下表pos=1,將下標為1的數字1,和它後面最小的且大於它的數替換,”21543”—>”23541″,然後再將下標1後面的字串翻轉得到:”23145″,這就得到了“21543”下一個順序值“23145”,如此下去,直到輸出所有結果。如果你想學習java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裡面有大量的學習資料可以下載。
參考程式碼如下:
排列演算法的結果總共有n!個,所以時間複雜度至少n!級別。
組合演算法
組合演算法程式碼比較簡單,可以讀程式碼理解:
放回全排列
放回全排列就是類似於三個篩子總共有6*6*6=216中結果。使用遞迴思想解決,程式碼比較簡潔。
參考程式碼如下:
相關文章
- 組合演算法java實現演算法Java
- python實現高效率的排列組合演算法Python演算法
- Java實現-全排列Java
- 字串全排列 java實現字串Java
- 【演算法】遞迴實現全排列演算法遞迴
- 全排列演算法的JS實現演算法JS
- 從基礎講全排列(Java實現)Java
- 遞迴演算法實踐---實現排列組合遞迴演算法
- 全排列及相關擴充套件演算法(二)——求字典序下一組排列及全排列演算法套件演算法
- 全排列演算法演算法
- 演算法——全排列演算法
- 【Algorithm】全排列演算法Go演算法
- 實現自然數N的全排列
- [整] JavaScript m選n組合演算法JavaScript演算法
- [演算法]全排列類問題演算法
- leetcode:全排列(java回溯)LeetCodeJava
- 前端電商 sku 的全排列演算法前端演算法
- 全排列的實現之遞迴版與迭代版遞迴
- 字串全排列字串
- 機器學習:整合演算法機器學習演算法
- 排列組合
- LeetCode46 回溯演算法求全排列,這次是真全排列LeetCode演算法
- Python使用combinations實現排列組合Python
- 字串的全排列字串
- 機器學習之整合演算法機器學習演算法
- 程式設計師必備演算法——排列組合程式設計師演算法
- 超酷演算法(2):分組密碼與安全排列演算法密碼
- 字母排列(python實現)Python
- [演算法] 固定的元素在固定長度上進行全排列演算法
- 請教一個關於全排列的演算法問題?演算法
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- JavaScript陣列元素全排列JavaScript陣列
- php對陣列進行全排列的非遞迴演算法PHP陣列遞迴演算法
- 排序演算法 Java實現排序演算法Java
- 排序演算法Java實現排序演算法Java
- java實現Bitmap演算法Java演算法
- KMP演算法 Java實現KMP演算法Java
- 字串排列組合問題字串