gpt4 book ai didi

javascript - 如何编写递归函数来获取表示每个值排列集合的数组?

转载 作者:行者123 更新时间:2023-12-03 11:25:24 24 4
gpt4 key购买 nike

我想编写一个函数 - 称之为 setGenerator() - 它接受两个参数:

  1. 可能值的数组
  2. 整数最大值

我希望我的函数返回一个数组数组,表示可能值的每个可能排列,从大小为 0 的集合到指定最大值的集合。

所以无论如何,这个函数总是至少返回一个包含空数组的数组。但这里有一个简单的例子来说明我正在尝试做的事情:

setGenerator(["A", "B", "C"], 2);
// should return:
// [ [], ["A"], ["B"], ["C"], ["A", "A"], ["A", "B"], ["A", "C"],
// ["B", "A"], ["B", "B"], ["B", "C"], ["C", "A"], ["C", "B"], ["C", "C"] ]

查看我的示例中的输入和输出。输入表明我可能的值是字符串 A、B 和 C,并且我应该形成大小为 0 到 2 的集合。因此返回的结果集是:

  • 一套尺寸为零的[]
  • 每个可能值的大小为 1 的集合:[A]、[B]、[C]
  • 每个排列的大小为 2 的集合:[A,A]、[A,B]、[A,C]、[B,A] 等。

如果我将最大值设置为 3,那么该函数还应该返回长度为 3 的所有排列集。

我希望这是有道理的。谁能帮我用 JavaScript 写这个?它必须涉及递归,但我在思考它时陷入困境。

更新:如果您阅读评论,您会发现我在这里描述的并不是技术上的排列。这实际上是一个比排列大得多的集合。但希望我上面的例子能够清楚地说明我在这里的目标。这些也许可以称为重复排列。我认为对于给定的数字应该有 x 的阶乘,但请记住我正在询问 0 到 x 的所有数字。

最佳答案

尝试一下,因为这个问题很有趣..

var results = [];

var setGenerator = function(values,max,prefix){
prefix = typeof prefix !== 'undefined' ? prefix : [];
results.push(prefix);
for (var i = 0; i<values.length; i++){
var newPrefix = prefix.slice(0);
newPrefix.push(values[i]);
if (newPrefix.length <= max)
setGenerator(values, max, newPrefix);
}
};

setGenerator(["A","B","C"],2);
console.log(results);

关于javascript - 如何编写递归函数来获取表示每个值排列集合的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com