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], [] ]
Subscribe to see which companies asked this question.
递归?动态规划?
[1,2,3]
[] 合计:[] 1
插入1 [1] 合计:[] [1] 2
插入2 [2] [1 2] 合计:[] [1] [2] [1 2] 4
插入3 [3] [1 3] [2 3] [1 2 3] 合计:[] [1] [2] [1 2] [3] [1 3] [2 3] [1 2 3] 8个
坑:!!!!!vector push_back/insert不能和迭代器同时使用!!!
会使迭代器失效
代码 :
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> rel;
vector<int> tmp (0,0);
rel.push_back(tmp);
sort(nums.begin(), nums.end());
if (nums.size() == 0)
return rel;
nums.erase(unique(nums.begin(), nums.end()), nums.end());//去重
vector<int>::iterator it;
int num,size;
vector<int> element;
for(it = nums.begin(); it != nums.end() ; it ++)
{
num = *it;
size = rel.size();
for (int j = 0; size > 0 ; j ++, size --)
{
element = rel[j];
//cout<<element.size()<<itt->size();
element.push_back(num);
//cout<<element.size()<<itt->size()<<endl;
rel.push_back(element);
}
}
return rel;
}
};