㈠ 我希望將123、132、213、231、312、321全排列輸出為1,2,3,請大俠給出演算法或者java代碼,謝謝!
遍歷所有排列的數據:例 123 將之拆分的 『1』 『2』 『3『 用一數組存取存在的數,雖然這辦法效率不高,但能你實現你的所要的效果,你按這個思想寫一下吧。實在不行,我再幫你寫一個
㈡ 全排列Java 源代碼實現
本文將通過提供一個Java源代碼實現全排列的例子,來回答關於全排列問題的提問。此代碼通過遞歸方法遍歷數組中的所有可能組合,最終列印出所有可能的全排列結果。
代碼定義了一個名為Test的類,包含一個靜態字元數組text和兩個靜態方法:permutation和printResult。permutation方法用於輸出全排列,接受一個字元數組、起始位置和長度作為參數。printResult方法用於輸出指定字元數組。
permutation方法首先檢查當前遞歸層級是否小於數組長度減一。如果是,它將遞歸調用自身以增加當前層級,並使用一個循環對數組從當前層級的下一個元素開始的所有元素進行交換操作。交換後,permutation方法再次遞歸調用自身,遞歸層級增加,最後將原始交換操作恢復,以確保所有可能的排列都被探索。
如果當前遞歸層級等於數組長度減一,則表示已經到達數組末端,此時調用printResult方法輸出當前排列。printResult方法通過遍歷數組並列印每個元素來實現這一功能。
在main方法中,初始化字元數組text,並調用permutation方法,以從索引0開始輸出全排列。最後,調用System.exit(0)確保程序在完成全排列輸出後終止。
這段Java代碼簡潔地展示了全排列演算法的實現,通過遞歸和交換操作來生成並列印出所有可能的排列組合,為理解和實現全排列問題提供了清晰的示例。
從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。
㈢ Java數組的全排列,裡面布爾類型的數組vis[ ],在遞歸演算法里起了什麼作用,遞歸那塊理解不了,求詳細解答
不要急於看代碼,你心理要知道全排列的思路,不注重思路是很多程序員易犯的錯誤。
全排列演算法:
如果我求得固定第一位後的排列,那麼全部排列就可以求出,固定第一位有10種可能,可以循環求得。
如果我求得固定第二位後的排列,固定第一位後的排列就可以求出,固定第二位有9種可能,可以循環求得。
。。。
如果我求得固定第10位後的排列,固定第9位後的排列就可以求出,固定第10位有1種可能,可以循環求得。
這很明顯是遞歸的演算法。
static void dfs(int start,int end,int num){//為全部排列的集合,start為數字的位置,end為最後一位,num多餘的
if(start==end){//當前的數字位置為最後一位時,說明,一個序列已經生成
for(int i=1;i<end;i++)
System.out.print(a[i]+" ");//輸出序列
System.out.println();
}
else{//序列沒有生成時
for(int i=1;i<end;i++){
if(vis[i])//i是否在前面使用過
continue;//如果是直接跳過
a[start]=i;//確定start位置的數字,當start為1時就是確定第一位,有10種可能
vis[i]=true;//設置i為已使用狀態,避免下一位使用i
dfs(start+1,end,num);//求得確定start位後的全部序列
vis[i]=false;//設置i為未使用狀態
}
}