全排列演算法(java實現)

來源:互聯網
上載者:User

100題目之53題目和70題目

在做100題目的時候,全排列的演算法困擾了很久,雖然網上了搜了一些資料,可是並沒有搞懂。今天花了一個下午的時間,從新梳理了一遍,終於弄明白了。

全排列的演算法,遞迴分析網上都有:

http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html

設一組數p = {r1, r2, r3, ... ,rn}, 全排列為perm(p),pn = p - {rn}。

因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。當n = 1時perm(p} = r1。

實現java代碼如下:

public class permutate {<br />public static int total = 0;<br />public static void swap(String[] str, int i, int j)<br />{<br />String temp = new String();<br />temp = str[i];<br />str[i] = str[j];<br />str[j] = temp;<br />}<br />public static void arrange (String[] str, int st, int len)<br />{<br />if (st == len - 1)<br />{<br />for (int i = 0; i < len; i ++)<br />{<br />System.out.print(str[i]+ " ");<br />}<br />System.out.println();<br />total++;<br />}<br />else<br />{<br />for (int i = st; i < len; i ++)<br />{<br />swap(str, st, i);<br />arrange(str, st + 1, len);<br />swap(str, st, i);<br />}<br />}</p><p>}<br />/**<br /> * @param args<br /> */<br />public static void main(String[] args) {<br />// TODO Auto-generated method stub<br /> String str[] = {"a","b","c"};<br /> arrange(str, 0, str.length);<br /> System.out.println(total);<br />}<br />}

關鍵的就是arrange方法的else裡面的內容,我的理解是(以求str[] = {"a","b","c"}的排列為例子):

用i從str[st]做一遍迴圈:

每一次迴圈中,都要將str[i]與str[i]互相調換位置:第一次開始,"a"與自己換,這時候,遞迴調用arrange[str,st + 1, len]

這是在求取str[str...len - 1]的排列即"b","c"的排列;

第二次,"a"與"b"互相調換,遞迴調用arrange[str,str + 1, len]就是在求取{"a","c"}的排列。

第三次,"a"與"c"互相調換,遞迴調用arrange[str, str + 1,len]就是在求取"{"b","a}的排列。

下面再以"b","c"的排列求取為例:

首先還是做迴圈,第一次,"b"與自己調換,這時候,調用arrange[str,st + 1,len], 就是求c的排列。呵呵,這時候終於到了函數遞迴調用的出口了

: st = len - 1。輸出"b" "c";

第二次,類似的,輸出"c","b";

至此,"b" "c"的排列求取完畢。加上前面的a,就輸出"a""b""c" "a""c""b"。

類似的,就可以輸出所有的排列了。


 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.