打印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&lt;vector&lt;int&gt;&gt; &amp;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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

解决ThinkPHP关闭调试模式时报错的问题汇总

解决ThinkPHP关闭调试模式时报错的问题汇总

解决ThinkPHP关闭调试模式时报错的问题汇总

Thinkphp设置仅在调试模式关闭时显示404页面

Thinkphp设置仅在调试模式关闭时显示404页面

thinkphp $this->success 关闭当前页 刷新父级页面