输入yPerms为3d数组的输入:
[
[[1,2,3],[4,5,6]],
[[11,12,13],[14,15,16]]
]
输出必须是每行中任何可能的值组合。对于此示例,正确的输出将是
[
[[1,2,3],[11,12,13]],
[[1,2,3],[14,15,16]],
[[4,5,6],[11,12,13]],
[[4,5,6],[14,15,16]]
]
现实中的输入会有更多的行和列,因此只需要几个for循环就可以完成(至少我不知道如何)。
我的尝试是完全混乱,问题是for循环中应该重置' temp,似乎从下一个名为:
的递归函数中获取了值 function treeTraverse(yPerms, unique, row) {
var result = [];
var path = unique||[];
var n = row||0;
if (yPerms.length <= n) {
console.log("found a path");
return path;
}
for(let m in yPerms[n]) {
var temp = path;
temp.push(yPerms[n][m]);
result.push(treeTraverse(yPerms,temp,n+1));
}
return result;
}
答案 0 :(得分:0)
问题在于,唯一和临时变成了相同的变量,只是一个彼此的指针,这不是我想要的,我希望它们是分开的但是采取相同的值以便我可以操纵温度而不改变路径。为了解决这个问题,我只是在路径上使用了slice(),所以
var temp = path.slice();
创建路径的相同副本并将其分配给temp。