Вы только когда-либо создаете один массив cur
, когда вызываете helper
:
helper(nums, result, []);
, который вы продолжаете мутировать и рекурсивно передаете в helper
. В памяти только один массив; к концу вы .pop
воспроизводите последний элемент из массива, и каждый элемент в массиве result
ссылается на один и тот же объект, теперь пустой массив cur
.
Вместо этого клонируйте cur
внутри l oop, поэтому, когда / если он выдвигается, вы нажимаете новый массив, а не ссылку на старый, который будет использоваться везде:
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]));