题目: 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 题目链接
我的JavaScript解法
/**
* @param {number[]} nums
* @return {number[][]}
*/
var subsetsWithDup = function(nums) {
nums.sort((a, b) => a - b);
let result = [];
let stack = [];
backtrack(nums, 0, stack, result);
return result;
};
const backtrack = (nums, startIndex, stack, result) => {
result.push([...stack]);
for (let i = startIndex; i < nums.length; i++) {
// pruning 值相同的相邻树枝,只遍历第一条
if(i > startIndex && nums[i] == nums[i-1])
continue;
stack.push(nums[i]);
backtrack(nums, i+1, stack, result);
stack.pop();
}
}
解析: 回溯法+剪枝
- 时间复杂度: , 为不同元素的个数(有待商榷)