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)