returns 重新排列数组的所有可能性的函数
Function that returns all possibilities of rearranging of an array
我是一名新手程序员,实际上我正在做一些编程挑战。这是我的问题:
如何创建一个 returns 数组所有重新排列可能性的函数?
示例(伪代码):
Array = ["aba", "bbb", "bab"] //this array have 6 possible arrangements
function arrayRearangement(Array) {
//receive the array and return all array arrangement possibilities (6)
}
arrayRearrangement(Array) = [["aba", "bbb", "bab"],
["aba", "bab", "bbb"],
["bbb", "aba", "bab"],
["bbb", "bab", "aba"],
["bab", "bbb", "aba"],
["bab", "aba", "bbb"]]
如果可以的话,请给我伪代码的解决方案(我更喜欢自己实现)。
但它可以用您喜欢的编程语言编写。
Obs.: 抱歉任何可能的英文错误,或者如果主题重复,我已经搜索了很多但没有找到任何东西
您可能想了解更多有关 backtracking 的知识以实现它。
在回溯中,您使用递归遍历问题的所有可能解决方案。
你的情况(伪代码):
GetAllPermutations(elements):
result = []
GetAllPermutations(set(elements), [], result)
return result
GetAllPermutations(elements, so_far, result):
if elements.empty():
result.add(so_far)
return
for x in elements:
elements.remove(x) // Note while implementing: this is problematic since modifying while iterating, there are ways to overcome it
so_far.append(x)
// This is the recursive call, which "assumes" x is set and checks all possible other solutions
GetAllPermutations(elements, so_far, result)
// set back the state for next iterations where x is viable selection
so_far.remove_last()
elements.add(x)
我是一名新手程序员,实际上我正在做一些编程挑战。这是我的问题:
如何创建一个 returns 数组所有重新排列可能性的函数?
示例(伪代码):
Array = ["aba", "bbb", "bab"] //this array have 6 possible arrangements
function arrayRearangement(Array) {
//receive the array and return all array arrangement possibilities (6)
}
arrayRearrangement(Array) = [["aba", "bbb", "bab"],
["aba", "bab", "bbb"],
["bbb", "aba", "bab"],
["bbb", "bab", "aba"],
["bab", "bbb", "aba"],
["bab", "aba", "bbb"]]
如果可以的话,请给我伪代码的解决方案(我更喜欢自己实现)。
但它可以用您喜欢的编程语言编写。
Obs.: 抱歉任何可能的英文错误,或者如果主题重复,我已经搜索了很多但没有找到任何东西
您可能想了解更多有关 backtracking 的知识以实现它。
在回溯中,您使用递归遍历问题的所有可能解决方案。
你的情况(伪代码):
GetAllPermutations(elements):
result = []
GetAllPermutations(set(elements), [], result)
return result
GetAllPermutations(elements, so_far, result):
if elements.empty():
result.add(so_far)
return
for x in elements:
elements.remove(x) // Note while implementing: this is problematic since modifying while iterating, there are ways to overcome it
so_far.append(x)
// This is the recursive call, which "assumes" x is set and checks all possible other solutions
GetAllPermutations(elements, so_far, result)
// set back the state for next iterations where x is viable selection
so_far.remove_last()
elements.add(x)