这是生成数组的唯一子集问题的解决方案nums
:
#include <bits/stdc++.h>
using namespace std;
void solveRec(vector<int> ss, set<vector<int>> &ans, vector<int> &nums, int i)
{
if (i == nums.size())
{
sort(ss.begin(), ss.end());
ans.insert(ss);
return;
}
ss.push_back(nums[i]);
solveRec(ss, ans, nums, i + 1);
ss.pop_back();
solveRec(ss, ans, nums, i + 1);
}
该函数采用整数数组nums
作为输入以及一组向量ans
来存储唯一子集。虽然传递ss
用于按值存储当前子集的向量会产生正确的答案,但通过引用传递它却不会,为什么会这样呢?
就nums
这样吧4 4 4 1
通过引用传递(不正确)会产生:
1
1 1
1 1 4
1 4
1 4 4
1 4 4 4
按值传递(正确)会产生:
1
1 4
1 4 4
1 4 4 4
4
4 4
4 4 4
请帮忙!!!