這裏給出兩個相等數量的數字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。這應該是我操縱的字符串生成相同數字的兩個數字的所有排列
回答
這聽起來像一個家庭作業問題(糾正我,如果我錯了),所以我只是要提供一些僞代碼來說明一般方法。你必須弄清楚如何使算法適應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個不同的字符重複,這會給你很多重複的排列。您的選項是檢查在將其添加到列表之前是否已經生成了排列,最後從列表中刪除重複項,還是針對您的情況優化遞歸。
:D實際上它不是一個家庭作業。它是一個競賽問題,這個http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=673 –
同樣適合於省去一個完整的解決方案,我想。但希望足以讓你走上正軌。 – Michelle
我知道排序類型算法..但我怎麼能涉及?我不想在這裏排序 –
- 1. 生成給定數字的數字的所有排列?
- 2. 生成一些數字範圍的所有排列序列
- 3. 從指定的數字列表中生成兩個數字
- 4. CCRandom_0_1()生成相同的數字
- 5. Math.random()生成相同的數字
- 6. Math.random生成相同的數字
- 7. Rand生成相同的數字
- 8. AS3 Math.random生成相同的數字
- 9. 生成兩個數字
- 10. 生成相關數字的UVM序列
- 11. 生成隨機數字的字母/數字,但不能使用相同的字母/數字兩次
- 12. Vb.net隨機數字生成器重複相同的數字
- 13. 生成兩個相同的隨機數和一個不同的
- 14. 兩個函數相同的名字python
- 15. 以字典順序生成列表的所有排列
- 16. 將csv中的所有數字除以相同的數字
- 17. 在javascript中將兩個數組中的所有數字相乘
- 18. NEAT兩個相同的基因有不同的創新數字
- 19. 在不同的java程序中生成兩個相同的隨機字母數字字符串
- 20. 爲什麼我的隨機數字生成器爲兩個數組都使用相同的數字?
- 21. MATLAB:生成相同的隨機數字序列
- 22. 在某個範圍內生成所有字符串排列
- 23. 生成的數字序列
- 24. 生成所有字母和數字的數組
- 25. 合併具有相同數字鍵的兩個PHP數組
- 26. 添加兩個數字以生成兩位數字
- 27. 如何按排序順序生成數組的所有排列?
- 28. 做循環 - 隨機數字生成相同的數字兩次,並沒有增加它在運行總數
- 29. 兩個數字之間的隨機數字生成器 - MatLab
- 30. 生成Java Card中兩個數字之間的隨機數字
任何特定語言?這種問題似乎顯示了很多,我試圖找到一個合適的鏈接 – StephenTG
可能的重複[查找字符串的所有獨特的排列](http://stackoverflow.com/questions/9217839/找到所有的唯一排列的字符串) – StephenTG