给定一个包含重复项的数组,返回所有不重复的子集
回溯法,深度优先遍历,去重 faster than 100%
/**
* @param {number[]} nums
* @return {number[][]}
*/
var subsetsWithDup = function(nums) {
var res = [[]]
if(nums.length === 0) return res
nums.sort((a, b) => a - b)
dfs(nums, 0, [], res)
return res
};
var dfs = function(nums, flag, sub, res){
for(var i = flag; i < nums.length; i++){
sub.push(nums[i])
res.push(sub.slice())
dfs(nums, i + 1, sub, res)
sub.pop()
while(nums[i] === nums[i + 1]) i++
}
}