【DFS+回溯】78. 子集 90. 子集 II
78. 子集
class Solution {
public:
void dfs(vector<int>& nums, vector<int> &cur, int index){
if(index > num_len)
return;
result.push_back(cur);
for(int i=index;i<num_len;++i){
cur.push_back(nums[i]);
dfs(nums, cur, i+1);
cur.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
num_len = nums.size();
vector<int> cur_num;
dfs(nums, cur_num, 0);
return result;
}
private:
int num_len;
vector<vector<int>> result;
};
90. 子集 II(含有相同元素求子集)
class Solution {
public:
void dfs(vector<int>& nums, vector<int> &cur, int index){
if(index > num_len)
return;
result.push_back(cur);
for(int i=index;i<num_len;++i){
if(i == index || nums[i] != nums[i-1]){
cur.push_back(nums[i]);
dfs(nums, cur, i+1);
cur.pop_back();
}
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
num_len = nums.size();
vector<int> cur_num;
dfs(nums, cur_num, 0);
return result;
}
private:
int num_len;
vector<vector<int>> result;
};

浙公网安备 33010602011771号