78. Subsets[Medium]
Description
Given a set of distinct integers, nums, return all possible subsets (the power set).
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
给出一个整数的集合,列出所有子集。
第一反应就觉得很简单,想着按顺序不断将新的数添加,从长度为0的子集开始,不断循环。发现因为长度不断增加,循环的个数也要不断增加,而这样是做不到的。
考虑到这个是gray code的后续,按照同样的解题思路,一位一位往上加,比如一开始是空子集,然后将[1]加入,此时子集就是[]、[1],然后添加[2],在每一个原子集中都加入,变成[]、[1]、[2]、[1,2],同理加入[3],[]、[1]、[2]、[1,2],[3]、[1,3]、[2,3]、[1,2,3]…….
题目要求是非降序,因此可以先把原数组做一个排序,直接调用sort即可。
Complexity analysis
O(n²)
粗糙估计,实际上应该小于
Code
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> result(1);
sort(nums.begin(), nums.end());
vector<int> temp;
for (int i = 0; i < nums.size(); i++) {
int size = result.size();
for (int j = 0; j < size; j++) {
result.push_back(result[j]);
result.back().push_back(nums[i]);
}
}
return result;
}
};