Discription:
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Solution:
void subsets(vector<int>& nums, vector<vector<int>> &result, vector<int> &temp,int begin) {
result.push_back(temp);
for (int i = begin; i < nums.size(); i++){
temp.push_back(nums[i]);
subsets(nums, result, temp, i + 1);
temp.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> result;
vector<int> temp;
subsets(nums, result,temp, 0);
return result;
}
Discription:
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Solution:
void subsets(vector<int>& nums, vector<vector<int>> &result, vector<int> &temp,int begin) {
result.push_back(temp);
for (int i = begin; i < nums.size(); i++){
if (i == begin || nums[i] != nums[i - 1]) {
temp.push_back(nums[i]);
subsets(nums, result, temp, i + 1);
temp.pop_back();
}
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> result;
vector<int> temp;
subsets(nums, result,temp, 0);
return result;
}
bool isDuplicate(vector<int>& nums, int begin, int i){
while (i > begin){
if (nums[i] == nums[begin])
return false;
i--;
}
return true;
}
void subsets(vector<int>& nums, vector<vector<int>> &result, vector<int> &temp,int begin) {
result.push_back(temp);
for (int i = begin; i < nums.size(); i++){
if (!isDuplicate(nums, begin, i))
continue;
temp.push_back(nums[i]);
subsets(nums, result, temp, i + 1);
temp.pop_back();
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>> result;
vector<int> temp;
subsets(nums, result,temp, 0);
return result;
}
GitHub-Leetcode:https://github.com/wenwu313/LeetCode