LeetCode 90.Subsets II (子集 II)
题目描述:
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
AC C++ Solution:
回溯法:
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<int> ivec;
vector<vector<int>> res;
subset(nums, ivec, 0, res);
return res;
}
void subset(vector<int> nums, vector<int>& ivec, int index, vector<vector<int>>& res){
res.push_back(ivec);
for(int i=index; i<nums.size(); i++){
ivec.push_back(nums[i]);
subset(nums, ivec, i+1, res);
while(i+1<nums.size() && nums[i]== nums[i+1])
i++;
ivec.pop_back();
}
}
};
还没有评论,来说两句吧...