题目
代码
var subsetsWithDup = function(nums) {
var res = [];
var track = [];
nums = nums.sort((a, b) => a - b);
var backTrack = function(nums, start) {
res.push([...track]);
for (var i = start; i < nums.length; i++) {
// 剪枝:先给nums排序,当后面一个元素和前一个元素一样时,说明重复了
// 一定要记得 i>start,控制 i 的值,避免子集重复,成全排列的情况
if (i > start && nums[i] == nums[i - 1]) {
continue;
}
// 做出选择
track.push(nums[i]);
// 遍历
backTrack(nums, i+1);
// 撤销选择
track.pop(nums[i]);
}
}
backTrack(nums, 0);
return res
};