c++生成子集
时间: 2023-07-04 12:12:02 浏览: 55
生成一个集合的所有子集可以使用位运算的方法。假设有一个大小为n的集合S,我们可以用一个n位的二进制数表示一个子集,第i位为1表示S中的第i个元素在子集中,为0表示不在子集中。
下面是一个C++代码示例:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
vector<vector<int>> res;
for (int i = 0; i < (1 << n); ++i) {
vector<int> subset;
for (int j = 0; j < n; ++j) {
if (i & (1 << j)) {
subset.push_back(nums[j]);
}
}
res.push_back(subset);
}
return res;
}
int main() {
vector<int> nums = {1, 2, 3};
vector<vector<int>> res = subsets(nums);
for (auto subset : res) {
for (auto num : subset) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
这段代码使用了位运算的技巧,将i作为一个二进制数,每次判断第j位是否为1,如果是则将S中的第j个元素加入子集中。最终得到的res就是S的所有子集。