Java基礎學習:java全排列遞歸算法

Java基礎學習:java全排列遞歸算法

天津卓眾教育      2022-05-06 20:00:01     52

Java基礎學習:java全排列遞歸算法,全排列解法一:輸入一串字符,然后對字符進行全排列,如“abc”,全排列結果為:abc,acb,bac,bca,cab,cba.分析:從字符串中選擇一

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹


    全排列


    解法一:


    輸入一串字符,然后對字符進行全排列,如“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的數(shù)字1,和它后面最小的且大于它的數(shù)替換,”21543”--->"23541",然后再將下標1后面的字符串翻轉得到:"23145",這就得到了“21543”下一個順序值“23145”,如此下去,直到輸出所有結果。


    參考代碼如下:



    排列算法的結果總共有n!個,所以時間復雜度至少n!級別。


    組合算法


    組合算法代碼比較簡單,可以讀代碼理解:




    放回全排列


    放回全排列就是類似于三個篩子總共有6*6*6=216中結果。使用遞歸思想解決,代碼比較簡潔。


    參考代碼如下:



 以上就是天津卓眾教育java培訓機構的小編針對“Java基礎學習:java全排列遞歸算法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。


Java基礎學習

培訓啦提醒您:交易時請核實對方資質,對于過大宣傳或承諾需謹慎!任何要求預付定金、匯款等方式均存在風險,謹防上當。