Leetcode 90. 子集 II
题目
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
测试样例
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
题解
回溯算法
避免重复,我们先对数组进行排序,在选数的时候,注意不要重复选即可
代码
vector<vector<int>> ans;
void dfs(int begin,int n,vector<int>& nums,vector<int> &num){
ans.push_back(num);
if(begin<n){
for(int i=begin; i<n; i++){
while(i>begin && i<n && nums[i]==nums[i-1]) i++; //避免数被重复选
if(i == n) break;
num.push_back(nums[i]);
dfs(i+1,n,nums,num);
num.pop_back();
}
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int> num;
dfs(0,nums.size(),nums,num);
return ans;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。