1,题目要求
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
给定一组不同的整数,nums,返回所有可能的子集(幂集)。
2,题目思路
对于这道题,所要求的是求出一个集合的所有子集。对于子集的概念,我们都非常清楚,其中空集也是任何集合的子集。
而在实现上,我们可以看到,假如说对于题目所给的1,2,3,子集序列可以是:
- ∅
- 1
- 2
- 1,2
- 3
- 1,3
- 2,3
- 1,2,3
经过观察可以得到,对于每个数字,我们每次都将它插入到之前的所有子集中,就可以得到新的子集序列。例如,对于1,此时的子集只有空集,因此,将1插入到空集,就得到1。
对于2,也是一样,将2插入到空集、1,就可以得到2和1,2。3也是同理。
3,代码实现
int x = []() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res {{}};
for(auto &n : nums){
int currLen = res.size();
for(int i = 0;i<currLen;i++){
res.push_back(res[i]); //将当前已经有的子集再加入到结果最后
res.back().push_back(n); //将新的数字插入到原先的每个子集中
}
}
return res;
}
};