输出整数数组的全部子集(子集个数计算公式:子集个数 = 2^n,n表示数组的元素的个数)
//问题:生成数组的所有空子集!
//数组的子集个数 = 2^n - 1
#include <vector>
#include <iostream>
using namespace std;
vector<vector<int>> subsets(vector<int>& vec)
{
vector<vector<int>> res;
int len = vec.size();
int state_number = 1 << len; //子集个数 //遍历[0, state_number),这里面的每一个数的二进制位就代表一个子集;
for (int i = 0; i < state_number; ++i)
{
vector<int> tmp;
for (int j = 0; j < len; ++j)
{
if ((1 << j) & i) //比特位为1,就选择对应的元素
{
tmp.emplace_back(vec[j]);
}
}
res.emplace_back(tmp);
}
return res;
}
//打印函数
void print_vec(const vector<vector<int>>& vec)
{
for (auto& num_vec : vec)
{
for (auto& num : num_vec)
{
std::cout << num << " ";
}
std::cout << std::endl;
}
std::cout << std::endl << std::endl;
}
int main()
{
vector<int> vec({ 1,2,3,4,5,6,7,8,9,0 });
vector<vector<int>> ans = subsets(vec);
print_vec(ans);
cout << "子集的个数 = " << ans.size() << std::endl;
system("pause");
return 0;
}