Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
1 | Input: nums = [1,2,3] |
递归回溯法
每次在现有的集合下选择加入下一个元素,并把每次的过程都放在最终的result中,然后把下一个元素pop出来,在此情况下选择下下个元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15vector<vector<int>> res;
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> temp;
backtrack(nums, 0, temp);
return res;
}
void backtrack(vector<int>& nums, int first, vector<int> temp){
res.push_back(temp);
for(int i = first; i<nums.size(); i++){
temp.push_back(nums[i]);
backtrack(nums, i+1, temp);
temp.pop_back();
}
}
迭代:
对于每一个nums[n],分别加入res中已经组成的vector,并将新的vector加入到res中
1
2
3
4
5
6
7
8
9
10
11
12
13
14vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> temp;
res.push_back({});
for(int n=0; n<nums.size(); n++){
int sz = res.size();
for(int i=0; i<sz; i++){
temp = res[i];
temp.push_back(nums[n]);
res.push_back(temp);
}
}
return res;
}