2012-04-05 98 views
1

假設我有數字1,2,3。算法看起來是什麼樣的,以便在所有可能的大小下采取所有可能的排列。輸出:java中所有可能大小的所有可能的排列

1, 2 ,3 | 3, 2 ,1 | 2, 1 ,3 | 1, 3, 2 ... | 1, 2 | 2, 1 | 3, 1 |..... 1 | 2 | 3

你只是做了正常的排列算法和輸入的每個字母量子問題?

+0

請標籤這個功課,如果這就是它是什麼,然後自己嘗試一下,並告訴我們你試過什麼。根據你喜歡循環還是遞歸,有幾種編寫算法的方法。您的建議將其分解爲遞歸子問題是一個好的開始。 – 2012-04-05 03:06:17

+0

很抱歉,這不是家庭作業。我試圖解決一個比賽問題,然後我意識到這個問題的基本前提是這個問題對於如何解決這個問題毫無頭緒。 – Tom 2012-04-05 03:08:00

+1

你應該仍然會採取一些措施,並在卡住的地方尋求幫助。恕我直言,比賽問題的關鍵不是在Stackoverflow上找到答案,並且Stackoverflow的重點不是爲人們回答比賽問題。 – rfeak 2012-04-05 03:10:16

回答

0

您需要生成所有可能的子集並對它們進行置換。

僞代碼(如下C++)

generate (a[]) { 
    int size = a.size; 
    sort(a) 
    for (i = 1; i < (1<<size); i++) { 
     b[]; 
     for (j = 0; j < size; j++) { 
      if (i&(1<<j)) { 
       add a[j] to b; 
      } 
     } 

     do { 
      for (i=0 to b.size) { 
       print b[i]; 
      } 
     }while(next_permutation(b.begin(), b.end()); 
    } 
} 
+0

如果你排序'a'一次。不需要重複排序'b'。 – st0le 2012-04-05 04:28:20

+0

@ st0le,是的。謝謝。 – 2012-04-05 04:32:16