Javascript 如何获得整数数组项的所有可能组合?
我有一个数字数组。在此数组中,每个数字重复“r”次 此函数正在生成数组:Javascript 如何获得整数数组项的所有可能组合?,javascript,Javascript,我有一个数字数组。在此数组中,每个数字重复“r”次 此函数正在生成数组: var n = 8; var k = 4; var r = 3; var comb = n * r / k; function getNumbers() { var array = new Array(); for (i = 0; i < r; i++) { for (j = 0; j < n; j++) { array.push(j); } } return arr
var n = 8;
var k = 4;
var r = 3;
var comb = n * r / k;
function getNumbers() {
var array = new Array();
for (i = 0; i < r; i++) {
for (j = 0; j < n; j++) {
array.push(j);
}
}
return array;
}
(mainArray中的所有项目都以小arr的形式显示,这样就不会有具有相同项目的小数组)此方案适用于一个数组和零件数组的给定
长度
length=2的值分布
0 0 1 1 2 2 3 3 4 4
0 1
0 2
1 3
2 4
3 4
length=3的值分布
0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7
0 1 2
0 1 3
0 2 4
1 3 5
2 4 6
3 5 7
4 6 7
5 6 7
关键功能是拼接使用的值,并使用length-1
增加位置,以便下一个项目推送到零件阵列。如果位置p
在数组外部,则该位置设置为数组的最后一个元素
函数getParts(数组,长度){
var r=[],
价值观
i、 p;
while(array.length>length){
值=[];
p=0;
对于(i=0;i=array.length){
p=数组长度-1;
}
push(数组拼接(p,1)[0]);
p+=长度-1;
}
r、 推动(价值观);
}
r、 推送(阵列);
返回r;
}
功能打印(o){
document.write(“”+JSON.stringify(o,0,4)+’
”);
}
打印(getParts([0,0,1,1,2,2]);
打印(getParts([0,0,1,1,2,2,3,3,4,4,2]);
打印(getParts([0,0,0,1,1,1,2,2,3,3,4,4,5,5,5,6,6,7,7,3])代码>所以如果我理解正确,您需要创建一个由n个数字组成的数组,并希望拆分为x个大小为comb的数组。是吗?是的,这些x阵列必须是uniq(uniq=这些x阵列中没有一个具有相同的项目)请添加一些示例。但是如果必须基于梳进行拆分,arr的大小应为每个3。右?comb=必须生成的小数组数
arr1=[0,1];
arr2=[0,2];
arr3=[1,2];
this 3 arrays are containing all items of mainArray and are uniq!!!.
In this exemple: n=3, k=2, r=2, comb=n*r/k=3;
n=total unique numbers from `mainArray [0,1,2]`;
k=length of small arrays
r= number of repetition of each unique n;
comb= the number of small arrays;
**Edit2- Exemple2:**
mainArray=[0,0,1,1,2,2,3,3,4,4]
arr1=[0,1];
arr2=[0,2];
arr3=[1,3];
arr4=[2,4];
arr5=[3,4];
n=5, unique numbers in main array;
k=2, length of small array;
r=2, repetition of each number in main array;
comb=5*2/2=number of combinations which must result!.
0 0 1 1 2 2 3 3 4 4
0 1
0 2
1 3
2 4
3 4
0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7
0 1 2
0 1 3
0 2 4
1 3 5
2 4 6
3 5 7
4 6 7
5 6 7