题目: 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
题目链接
我的JavaScript解法
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permuteUnique = function(nums) {
let result = [];
let used = new Array(nums.length); //记录是否使用过
nums.sort((a, b) => (a-b));
track(nums, [], used, result);
return result;
};
var track = (nums, path, used, result) => {
if(path.length == nums.length) {
result.push([...path]);
return;
}
for (let i = 0; i < nums.length; i++) {
if (used[i]) continue; //使用过,剪枝
if (i - 1 >= 0 && nums[i - 1] == nums[i] && !used[i - 1])
continue; // 和前一个相等,剪枝
path.push(nums[i])
used[i] = true;
track(nums, path, used, result);
path.pop();
used[i] = false;
}
}
解析: 同样使用回溯法,但是结束条件不同,需要剪枝