假设N = 3,我想编写一个函数来生成3个唯一的随机数,如果所有数字相加等于3。例如:
我已经有自己的JavaScript解决方案,如下所示:
numbers = [1, 0, 2]
numbers = [2, -4, 5]
我已经有自己的JavaScript解决方案,如下所示:
let i = 0;
let arr = []
function getRandomInt(number) {
return Math.floor(Math.random()*(number*2)) - number;
}
function generateArray(i, arr, number) {
let lastIndex = number-1;
while (i < lastIndex) {
let randomNumber = getRandomInt(number);
if (arr.indexOf(randomNumber) > -1) {
continue;
} else {
arr[i] = randomNumber;
}
i++;
}
let summed = arr.reduce((a, b) => a+b);
let lastNumber = number - summed;
if (arr.indexOf(lastNumber) > -1) {
return generateArray(lastIndex-1, arr, number);
} else {
arr[lastIndex] = lastNumber;
return arr;
}
}
但是我仍然有一个问题,最后一个索引往往会偏离得相当大。例如,当N = 10时,我可能会得到如下结果:
numbers = [2, -1, 3, 4, -4, 0, -5, -8, -6, 15]
我想知道你们是否有更好的解决方案,同时性能更好。谢谢!