[英]Why does this code return an empty array?
問題:給定一組不同的整數,返回所有可能的排列。
示例:輸入:[1,2,3]
所需輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1 ]]
JavaScript 中的數組不是按引用傳遞的嗎? 為什么返回時結果數組為空?
/** * @param {number[]} nums * @return {number[][]} */ var permute = function(nums) { var result = []; helper(nums, result, []); return result; }; var helper = function(nums, result, cur) { if (cur.length == nums.length) { result.push(cur); } else { for (let i = 0; i < nums.length; i++) { cur.push(nums[i]); helper(nums, result, cur); cur.pop(); } } } console.log(permute([1, 2, 3]));
當您調用helper
時,您只會創建一個cur
數組:
helper(nums, result, []);
您繼續變異並在helper
遞歸傳遞。 內存中只有一個數組; 截至去年底,你.pop
PED該數組中的最后一個項目,而在每一個項目result
數組是指同一個對象,現在空cur
陣列。
相反,在循環cur
,這樣當/如果它被推送,你正在推送一個新數組,而不是對舊數組的引用,舊數組將在任何地方重用:
for (let i = 0; i < nums.length; i++) {
const temp = cur;
cur = [...cur, nums[i]]; // Similar to `.push`, except it creates a new array
helper(nums, result, cur);
cur = temp; // Similar to `.pop` - reverts the array to what it was originally
}
var permute = function(nums) { var result = []; helper(nums, result, []); return result; }; var helper = function(nums, result, cur) { if (cur.length == nums.length) { result.push(cur); } else { for (let i = 0; i < nums.length; i++) { const temp = cur; cur = [...cur, nums[i]]; // Similar to `.push`, except it creates a new array helper(nums, result, cur); cur = temp; // Similar to `.pop` - reverts the array to what it was originally } } } console.log(permute([1, 2, 3]));
不,JavaScript 中的一切都是按值傳遞的。 在您的函數helper
,將創建一個局部變量result
,然后在helper
調用時分配參數的值。 你最有可能想要做的是: result = helper(nums, result, []);
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.