【发布时间】:2020-02-23 09:06:11
【问题描述】:
我有一种情况,我需要将一个由未知长度的整数组成的随机数组转换为多对 2。
例如:
var numbers = [1, 5, 0, 7, 5, 5, 1, 7, 5, 1, 2, 1];
-----------------------------------------------------
[[1, 5], [0, 7], [5, 5], [1, 7], [5, 1], [2, 1]]
需要遵守一些限制条件,例如:
- 应该正好有 6 对(每对 2 个数字)。
- 如果
numbers数组中的数字不足以组成 6 对,则生成一个介于 1-9 之间的数字。 -
numbers数组中的每一项只能使用一次。 - 每一对都必须是唯一的。但例如
[1,2]和[2,1]可以被视为不同的对。 - 一对不能包含
[0, 0]
到目前为止,我发现了一个可以找到组合的函数,但是一旦它已经使用它就不会忽略索引。
var numbers = [1, 5, 0, 7, 5, 5, 1, 7, 5, 1, 2, 1];
function p(t, i) {
if (t.length === 2) {
result.push(t);
return;
}
if (i + 1 > numbers.length) {
return;
}
p(t.concat(numbers[i]), i + 1);
p(t, i + 1);
}
var result = [];
p([], 0);
console.log(result);
接下来我该怎么做?
【问题讨论】:
-
如何生成随机数?
-
使用 Math.Random(),一个介于 1-9 之间的数字。
标签: javascript arrays algorithm