返回重新排列数组的所有可能性的函数

Function that returns all possibilities of rearranging of an array

提问人:Beomond 提问时间:7/19/2020 最后编辑:amitBeomond 更新时间:7/19/2020 访问量:58

问:

我是一个新手程序员,我实际上正在做一些编程挑战。这是我的问题:

如何创建一个返回数组所有重新排列可能性的函数?

示例(在伪代码中):

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.:很抱歉有任何可能的英语错误,或者如果这个话题被重复,我被搜索了很多,没有找到任何东西

数组 算法 语言不可知

评论

0赞 Jerry Coffin 7/22/2020
几乎重复:stackoverflow.com/q/11483060/179910

答:

0赞 amit 7/19/2020 #1

您可能想了解更多关于回溯的信息,以便实现它。

在回溯中,您可以使用递归来检查问题的所有可能解决方案。

在您的案例中(伪代码):

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)