2012-02-23 55 views
1

我在其中,我都有一個編號,需要 發現在該號碼的位數每一種可能的排列問題的工作。例如,對於 示例,如果我給出20,則答案將是:2002。我知道 有n!可能的排列,我已經劃分了 數字,以便每個數字是一個數組中的元素。我的問題是: 我如何遍歷這個數組生成每一個可能的組合 一個數字,是至少2位長,但沒有更多的 超過6生成所有獨特的排列

+0

如果數字是'22',該怎麼辦? – ArjunShankar 2012-02-23 15:18:19

+0

對不起,我不太瞭解你的問題。如果你給一個數字20,那麼答案將是:20,022,220,200,000,...... 22,222.26000000? – hqt 2012-02-23 15:19:41

+0

爲了澄清,我說我想生成一組數字的每個可能的組合。如果給定的數字是1234,我需要生成1234,1243,1432,4213等,直到生成了所有可能的組合。 – gmaster 2012-02-23 15:25:40

回答

2

說出n個別數字的長度n的陣列。然後生成排列的問題歸結爲:

  1. 選擇的n位數作爲第一個數字打印一張。
  2. 排列剩餘的n-1數字。

遞歸。

中的僞這樣一個遞歸函數permute會是這樣的:

List permute (Array digits) 
{ 
    List permutations = /* initialize an empty list */ 

    for (i=0; i<n; i++) 
    { 
     firstDigit = digit[i]; 
     Array otherDigits = /* array containing all digits except firstDigit. */ 
     List subPermutations = permute(otherDigits); 
     /* prepend firstDigit into each element of 'subPermutations' */ 
     /* add all elements of 'subPermutations' to the list 'permutations' */ 
    } 
    return permutations; 
} 

然後只需撥打permute並打印出清單,或者其他任何與它。

編輯:您還需要處理的permute邊緣荷蘭國際集團的情況下1位。

我認爲這已經是'家庭作業'的太多信息:)

+0

你是什麼意思「把preDigit放到'subPermutations'的每個元素中?」我不明白這將如何得到每一個可能的排列。 – gmaster 2012-02-23 15:42:01

+0

@gmaster - http://pastebin.com/5w7GE5iQ – ArjunShankar 2012-02-23 15:55:21

+0

前置意味着在開始時添加。我沒有看到我如何在評論中解釋這一點,我認爲不值得將它放在答案中。因此請閱讀上面的pastepin網址(該網址設置爲1個月後過期) – ArjunShankar 2012-02-23 15:56:42

5

提示:

你會如何解決這個問題一位數字的問題?

現在,你會如何解決這個問題,因爲你必須回答前一個問題,對於一個2位數?

+0

對於1位數字,您不必更改任何內容。我很抱歉,但我完全不知道你要做什麼。我認爲使用2 for循環,但是這不會產生每個可能的術語。 – gmaster 2012-02-23 15:22:33

+0

@gmaster:這是你的作業,所以我只給予提示。拿一支鉛筆和紙。在上面寫上任何一個數字。現在想想包含第一位數字的2位數字。現在寫下第一個數字的副本,將第二個數字放在它旁邊,並且您有一個排列。現在,您還可以如何將第二個數字放在第一個旁邊作爲另一個排列?當你在紙上計算出你的方法變成代碼時。但是,直到你找到它,忘記你的過早的代碼。 – 2012-02-23 15:25:41

+1

老實說,幫助作業,這是一個很好的和公平的提示:) – ArjunShankar 2012-02-23 15:57:51