var permuteUnique = function(nums) {
var res = [];
if (nums.length == 0 || nums == null) return res;
var used = [];
var list = [];
nums.sort();
dfs(nums, used, list, res);
return res;
};
function dfs(nums, used, list, res) {
if (list.length == nums.length) {
res.push(list.slice());
return;
}
console.log(res, list);
for (var i = 0; i < nums.length; i++) {
if (used[i]) continue;
if (i > 0 && nums[i] === nums[i - 1] && !used[i]) continue;
used[i] = true;
list.push(nums[i]);
dfs(nums, used, list.slice(), res);
used[i] = false;
list.pop();
}
}
console.log(permuteUnique([1,1,2]));
运行后,
当输入为[1,1,2]
时。结果总是返回[]
。正确答案应为[[1,1,2],[1,2,1],[2,1,1]]
。
有人可以帮忙看看吗?预先谢谢你。
答案 0 :(得分:0)
首先,您没有在函数res
中重新分配变量permuteUnique
。
var permuteUnique = function(nums) {
var res = []; // var res is assigned
if (nums.length == 0 || nums == null) return res;
var used = [];
var list = [];
nums.sort();
dfs(nums, used, list, res);
return res; // you never reassigned res, so it remains []
};
无论传递的参数如何,permuteUnique(whateverArgumentYouPass)
的结果始终为[]
。您可能想了解有关函数基础和返回值here的更多信息。
此外,在permuteUnique
内调用了dfs(nums, used, list, res);
,但从未捕获返回值。如果执行计算以在此处查找排列,则应返回计算出的值并将其分配给变量(在本例中为res)。这也不会在您的代码中起作用,因为您的函数dfs
将始终返回undefined
。
还有其他几件事情行不通,但我首先要关注上述几点。