[英]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.