为什么此数组排列(重复)不起作用

时间:2019-01-11 19:01:26

标签: javascript arrays

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]]。 有人可以帮忙看看吗?预先谢谢你。

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

还有其他几件事情行不通,但我首先要关注上述几点。