打印powerset [关闭]
Posted
技术标签:
【中文标题】打印powerset [关闭]【英文标题】:Print the powerset [closed] 【发布时间】:2020-09-23 14:49:22 【问题描述】:为什么下面的打印一组整数的幂集的代码给出了错误的答案?实际上,它只是打印空集。我犯了什么错误?
vector<vector<int>> subsets(vector<int>& nums)
vector<vector<int>>subset;
vector<int>v;
dfs(subset,0,nums,v);
return subset;
void dfs(vector<vector<int>> subset, int index, vector<int>&nums, vector<int>&v)
subset.push_back(v);
for(int i=index;i<nums.size();i++)
v.push_back(nums[i]);
dfs(subset,i+1,nums,v);
v.pop_back();
【问题讨论】:
请在问题中包含minimal reproducible example,期望和实际输出 您是否知道您将subset
按值传递给dfs()
?所以,如果你离开dfs()
,你将失去你推回给它的任何东西。对我来说,它看起来应该是void dfs(vector<vector<int>> &subset, ...
。否则,return subset;
(在subsets()
)显然总是会返回一个空向量。
您正在更改 dfs 中子集的本地副本。如果你希望 dfs 函数改变它的参数,你应该接受一个引用而不是一个值。
您也先将v
推送到subset
,然后将更多内容推送到v
。但是在subset.push_back(v);
之后,您将拥有原始向量v
和它的副本subset
。修改v
不会影响向量中的副本。这可能是需要的,但至少看起来很可疑
subsets
只打印空的subset
因为dfs
函数从未改变它
【参考方案1】:
您正在将子集按值传递给 dfs 函数。尝试通过引用或地址传递它。否则你的子集不会改变。
void dfs(vector<vector<int>> & subset, ...)
【讨论】:
以上是关于打印powerset [关闭]的主要内容,如果未能解决你的问题,请参考以下文章