2013-08-01 43 views
-3

這裏給出兩個相等數量的數字1和0。現在我正試圖找到它的可能組合。像這樣假設我給了2 1和2 0。我從0011開始形成,比我沿着左邊的第一個移動0101,然後移動1001.現在我移動第二個,產生1010和1100.這種方法是否有效。我缺乏0110,我不知道如何做到這一點。我想有這樣的遞歸回溯的方法。但我不知道技術回溯。我儘管理解遞歸。那麼有誰能告訴我方法嗎?無論是迭代還是遞歸。如果可能的話。 我正在嘗試查找所有可能的置換。對於2 1和0,它是1001,1100,1010,0101,0110,0011。那就是4!/(2!* 2!)排列。我如何做更多,如111000或11110000?並且該語言將是C++。並澄清它可以是任何字符,如ooii或kkjj。這應該是我操縱的字符串生成相同數字的兩個數字的所有排列

+0

任何特定語言?這種問題似乎顯示了很多,我試圖找到一個合適的鏈接 – StephenTG

+0

可能的重複[查找字符串的所有獨特的排列](http://stackoverflow.com/questions/9217839/找到所有的唯一排列的字符串) – StephenTG

回答

0

這聽起來像一個家庭作業問題(糾正我,如果我錯了),所以我只是要提供一些僞代碼來說明一般方法。你必須弄清楚如何使算法適應C++的工作(並希望在過程中理解它)。

這個想法是採取每個字符,並遞歸地將其附加到其餘字符的每個排列。基本情況是空字符串。

function foo (List<char> chars) 
    List<string> permutations = new List<string>() 
    for i:0..chars.length - 1 
     List<string> subPermutations = foo(chars.removeAt(i)) 
     for each string perm in subPermutations 
      permutations.add(chars.get(i) + perm) 
     end for 
    end for 
    if permutations is empty 
     permutations.add("") 
    end if 
    return permutations 
end foo 

作爲一個補充說明,因爲你具體處理2個不同的字符重複,這會給你很多重複的排列。您的選項是檢查在將其添加到列表之前是否已經生成了排列,最後從列表中刪除重複項,還是針對您的情況優化遞歸。

+0

:D實際上它不是一個家庭作業。它是一個競賽問題,這個http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=673 –

+0

同樣適合於省去一個完整的解決方案,我想。但希望足以讓你走上正軌。 – Michelle

0

按照您喜歡的語言閱讀排序算法。這裏有雲的類型排序的一些描述:

https://en.wikipedia.org/wiki/Sorting_algorithm

OR

我不知道你在說什麼。

+0

我知道排序類型算法..但我怎麼能涉及?我不想在這裏排序 –