题目
数组中元素为正整数,如data = {1, 2, 3, 6},目标值target=6,求data中有多少种组合的和为target值。
思路
暴力遍历data的每一种组合,使用掩码+prev_permutation的组合。
int fun(const vector<int>& data, int target)
{
int N = data.size();
vector<bool> bitMask(N, false);
int count = 0;
for (int i = 0; i < N + 1; ++i)//i:这轮选i个数
{
for (int j = 0; j < N; ++j) bitMask[j] = false;
for (int j = 0; j < i; ++j) bitMask[j] = true;
do {
int tmp = 0;
for (int k = 0; k < N; ++k) tmp += bitMask[k] ? data[k] : 0;
if (tmp == target)
{
++count;
cout << "{nums: ";