繁体   English   中英

Javascript函数的意外输出

[英]Unexpected output of Javascript function

我正在尝试编写一个可以执行排列的函数。

例如,如果我输入[1, 2, 3] ,预期答案将是

[ [ 3, 2, 1 ], [ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ] ]

但它没有显示答案,而是返回[[ ],[ ],[ ],[ ],[ ]]

有任何想法吗?

 var permute = (nums) => { results = []; var backtrack = (nums, result) => { if (nums.length === result.length) { results.push(result); } else { for (var i = 0; i < nums.length; i++) { if (result.indexOf(nums[i]) > -1) { continue; } result.push(nums[i]); backtrack(nums, result); result.pop(); } } } backtrack(nums, []); return results; }; console.log(permute([1, 2, 3])); 

您可以通过切片此数组来获取result的本地副本,以防止结果集中的相同对象引用。

 var permute = (nums) => { var results = []; var backtrack = (nums, result) => { if (nums.length === result.length) { results.push(result.slice()); // push copy } else { for (var i = 0; i < nums.length; i++) { if (result.indexOf(nums[i]) > -1) { continue; } result.push(nums[i]); backtrack(nums, result); result.pop(); } } }; backtrack(nums, []); return results; }; console.log(permute([1, 2, 3]).map(a => a.join(' '))); 

没有推送和弹出的版本。

 var permute = (nums) => { var results = []; var backtrack = (nums, result) => { if (nums.length === result.length) { results.push(result); } else { for (var i = 0; i < nums.length; i++) { if (result.indexOf(nums[i]) > -1) { continue; } backtrack(nums, result.concat(nums[i])); // use a new array } } }; backtrack(nums, []); return results; }; console.log(permute([1, 2, 3]).map(a => a.join(' '))); 

只是另一种使用reverse()的方法,一个特殊的排列例,OP给出了一个例子:

var arr = [ [ 3, 2, 1 ], [ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ] ];

var permuted = arr.map((num) => {

    return num.reverse();

});

console.log(permuted);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM