为了将相同的值连续放在一起,于是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]));