簡體   English   中英

為什么這段代碼返回一個空數組?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM