我有一个数组说,
var a = [1,2,3];
我希望将其分成正好n个块,但包含所有组合。
示例:
当n=2
它应该返回时
combination1: [1],[2,3] or combination1: [2,3],[1]
combination2: [2],[1,3] or combination2: [1,3],[2]
combination3: [3],[1,2] or combination3: [1,2],[3]
我已经尝试过这段代码但是没有给我所有的组合
function go(array, n) {
function iter(left, right) {
var i,
l = left.length - n + right.length + 1;
if (right.length + 1 === n) {
result.push(right.concat([left]));
return;
}
for (i = 1; i <= l; i++) {
iter(left.slice(i), right.concat([left.slice(0, i)]));
}
}
var result = [];
iter(array, []);
return result;
}
答案 0 :(得分:0)
使用此:
Array.prototype.partition = function(i) {
return this.reduce((a, r, l) => {
if (typeof a === "number") return [ [[a, r]], [[a],[r]] ];
V = [];
a.forEach(u => {
y = Array.from(u);
if (i > y.length) {
y.push([r]);
V.push(y);
}
if (i - u.length <= this.length - l - 1) {
u.forEach((t, t_i) => {
t = t.concat(r);
t = [t].concat(u.filter((z, z_i) => (z_i != t_i)));
V.push(t);
})
}
});
return V;
})
};
console.log([1, 2, 3].partition(2));
console.log([1, 2, 3, 4].partition(3));