如果我有 n 个球和 k 个容器,那么这个 -> ( (n+k-1)! / n!(k-1)! ) 将计算出有多少组合。
我很难更改它以生成 javascript 中所有组合的列表。
在一个带有一系列球和一些容器的函数中。
组合([1,2,3,4,5,6], 3)
每个容器可以有任意数量的球,容器可以是空的。
这是我尝试过的事情,但我在每个容器中只得到一个球。
function generateCombinations(array, r, callback) {
function equal(a, b) {
for (var i = 0; i < a.length; i++) {
if (a[i] != b[i]) return false;
}
return true;
}
function values(i, a) {
var ret = [];
for (var j = 0; j < i.length; j++) ret.push(a[i[j]]);
return ret;
}
var n = array.length;
var indices = [];
for (var i = 0; i < r; i++) indices.push(i);
var final = [];
for (var i = n - r; i < n; i++) final.push(i);
while (!equal(indices, final)) {
callback(values(indices, array));
var i = r - 1;
while (indices[i] == n - r + i) i -= 1;
indices[i] += 1;
for (var j = i + 1; j < r; j++) indices[j] = indices[i] + j - i;
}
callback(values(indices, array));
}
count = 0
generateCombinations([1,2,3,4,5,6,7,8,9,1],3,function(first){
$("#hello").append(first+"<br />")
count = count +1
})
$("#hello").append(count)