解决以下问题的最JS方式是什么?
给定一个数组A,找到所有数组B,使得对于i <= A.length:B [i] <= A [i]。我期望的示例:
#Input
A = [1,2,0]
#Output
B = [[0,0,0],
[1,0,0],
[1,1,0],
[1,2,0],
[0,1,0],
[0,2,0]]
在Python中,我使用了:
B = [[]];
for t in [range(e+1) for e in A]:
B = [x+[y] for x in B for y in t]
谢谢!
答案 0 :(得分:0)
使用以下代码(对数组a
的一项进行任何循环):
var a = [1, 2, 0], b = [];
for (var i = 0; i < a[0]; i++) {
for (var j = 0; j < a[1]; j++) {
for (var k = 0; k <= a[2]; k++) {
b.push([i, j, k]);
}
}
}
如果仅在运行时知道数组a
中的项目数,请使用以下递归函数:
function fillArray(source, dest, recursionLevel, tempArr) {
if (recursionLevel >= source.length) {
dest.push(tempArr);
return;
}
for (var i = 0; i <= source[recursionLevel]; i++) {
var tempArr2 = tempArr.slice(); // Copy tempArr
tempArr2.push(i);
fillArray(source, dest, recursionLevel + 1, tempArr2);
}
}
fillArray(a, b, 0, []);
答案 1 :(得分:0)
我找到了这个解决方案。我相信它可以用更好的方式编码。但是,它可以工作,希望您发现它有用
all_combinations(A){
var B = [];
for (var i = 0; i < A[0] + 1; i++) {
B.push([i]);
}
for (var i = 1; i < A.length; i++) {
var _tmp_array = [];
for (var j = 0; j < A[i] + 1; j++) {
for (var k = 0; k < B.length; k++) {
var _new_element = B[k].concat([j]);
_tmp_array.push(_new_element);
}
}
B = _tmp_array;
}
return B;
}