剑指 Offer II 084. 含有重复元素集合的全排列

125 阅读1分钟

剑指 Offer II 084. 含有重复元素集合的全排列

为了将相同的值连续放在一起,于是sort排序一下 arr.sort((x, y) => x - y);

对于同一个元素,不可以同时考虑,所以if (brr[i]

对于连续值相同的元素,对于他们来说起始值是重复的,所以(arr[i] === arr[i - 1] && !brr[i - 1]),它的测试代码在最下面

var permuteUnique = function (arr) {
  var res = [];
  var brr = new Array(arr.length).fill(false);
  arr.sort((x, y) => x - y);
  f(0, []);
  return res;
  function f(j, crr){
    if (j === arr.length) {
      res.push(crr.slice());
      return;
    }
    for (var i = 0; i < arr.length; i++) {
      if (brr[i] || (arr[i] === arr[i - 1] && !brr[i - 1])) {
        continue;
      }
      crr.push(arr[i]);
      brr[i] = true;
      f(j + 1, crr);
      brr[i] = false;
      crr.pop();
    }
  }
};

测试代码

  var flag = arr[i] === arr[i - 1] && !brr[i - 1]
  if(!brr[i] && flag){
    debugger
  }
  if (brr[i] || flag) continue;
console.log(permuteUnique([1,1,1,1,1,1,2]));