subsets1:
class Solution {
public:
/*
* @param nums: A set of numbers
* @return: A list of lists
*/
vector<vector<int>> subsets(vector<int> &nums) {
// write your code here
//存放结果的results ,和子集 subset
vector<vector<int>> results;
vector<int> subset;
//检测是否空
// if(nums.size()==0) return results;
Dfs(nums,0,subset,results);
return results;
}
void Dfs(vector<int> &nums,
int firstindex,
vector<int> &subset,
vector<vector<int>> &results){
results.push_back(subset);
for(int i = firstindex ; i < nums.size() ; i++){
subset.push_back(nums[i]);
Dfs(nums,i+1,subset,results);
subset.pop_back();
}
return;
}
};
subsets2:
class Solution {
public:
/*
* @param nums: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
vector<vector<int>> subsetsWithDup(vector<int> &nums) {
// write your code here
vector<int> subset;
vector<vector<int>> results;
//if(nums.size() == 0){
// return results;
//}
sort(nums.begin(),nums.end());
DFS(nums,0,subset,results);
return results;
}
void DFS(vector<int> &nums,
int startindex,
vector<int> &subset,
vector<vector<int>> &results){
results.push_back(subset);
for(int i = startindex;i < nums.size();i++){
if(i != 0 && nums[i] == nums[i-1] && i > startindex ){
continue;
}
subset.push_back(nums[i]);
DFS(nums,i+1,subset,results);
subset.pop_back();
}
}
};