Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获得整数数组项的所有可能组合?_Javascript - Fatal编程技术网

Javascript 如何获得整数数组项的所有可能组合?

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

我有一个数字数组。在此数组中,每个数字重复“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 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