【发布时间】:2017-06-05 17:03:33
【问题描述】:
我正在尝试创建一种算法来创建随机长度的 n 字符串,其总和等于给定数量。
一个更清楚的例子:
total = 20;
n = 7;
strings = ['aaaa', 'a', 'aaaaaaa', 'aa', 'aaa', 'aa', 'a'];
所以我有 7 个随机长度的字符串,它们各自长度的总和是(除非我进行了错误计数)20。
直到现在我想出了这个递归函数:
gaps = [];
function createGapsArray(total, n) {
if (n == 1) {
var gapLength = total;
} else {
var gapLength = getRandomInt(1, total / 2);
}
var gap = "";
for (var i = 0; i < gapLength; i++) {
gap += "a";
}
gaps.push(gap);
if (n > 1 && total > 0) {
createGapsArray(total - gapLength, --n);
}
}
这实际上不起作用。通常它在生成我想要的所有 n 段之前完成。通过我完成的少数测试,似乎将总数除以 4 而不是 2 可以完成工作。喜欢:
var gapLength = getRandomInt(1, total / 4);
但是这个约束的选择是任意的。我想知道是否有更好的方法。
另外,我知道,通过我的方法,算法最初可能会生成较长的片段,而最终会生成较小的片段。我不介意均匀分布,但这没什么大不了的,因为我可以在完成后简单地对数组进行洗牌。
【问题讨论】: