更新時(shí)間:2020-04-10 14:04:48 來源:動力節(jié)點(diǎn) 瀏覽2558次
全排列
解法一:
輸入一串字符,然后對字符進(jìn)行全排列,如“abc”,全排列結(jié)果為:"abc","acb","bac","bca","cab","cba".
分析:從字符串中選擇一個(gè)作為第一個(gè)字符,然后對剩下的字符串進(jìn)行全排列,如此遞歸下去,直到打印出全部排列。如:"abc":
1、選a作為第一個(gè)字符:”abc“,”acb“;
2、選b作為第一個(gè)字符:”bac“,”bca“;
3、選c作為第一個(gè)字符:”cab“,”cba“;
參考代碼如下:
解法二:
這種解法是將字符串從小大倒排序,以此得到整體的最小順,然后找到次小順序,直到得到最大順序,也就是從大到小的順序,如:”23415“,最小順序是:"12345",次小順序是:”12354“,........直到最大順序:”54321“。這里重點(diǎn)是找到某個(gè)順序值得下一個(gè)順序。找下一個(gè)順序的算法如下:假設(shè)到了”21543“,從后往前找到i-1位置小于i位置的下標(biāo),1<5,所以要找的下表pos=1,將下標(biāo)為1的數(shù)字1,和它后面最小的且大于它的數(shù)替換,”21543”--->"23541",然后再將下標(biāo)1后面的字符串翻轉(zhuǎn)得到:"23145",這就得到了“21543”下一個(gè)順序值“23145”,如此下去,直到輸出所有結(jié)果。
參考代碼如下:
排列算法的結(jié)果總共有n!個(gè),所以時(shí)間復(fù)雜度至少n!級別。
組合算法
組合算法代碼比較簡單,可以讀代碼理解:
放回全排列
放回全排列就是類似于三個(gè)篩子總共有6*6*6=216中結(jié)果。使用遞歸思想解決,代碼比較簡潔。
參考代碼如下:
以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java基礎(chǔ)學(xué)習(xí):java全排列遞歸算法”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743