首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pushback()调用powerset函数后向量大小保持静态

pushback()调用powerset函数后向量大小保持静态
EN

Stack Overflow用户
提问于 2015-03-25 20:34:28
回答 1查看 170关注 0票数 0

我编写了以下函数,作为this algorithm/approach的实现,以生成给定字符串的电源集(所有子集的集合):

代码语言:javascript
运行
复制
vector<string> getAllSubsets(string a, vector<string> allSubsets) 
{   
    if(a.length() == 1)
    {   
    // Base case, 
    allSubsets.push_back("");
    allSubsets.push_back(a);
    }

    else {
        vector<string> temp = getAllSubsets(a.substr(0,a.length()-1),allSubsets);
        vector<string> with_n = temp;
        vector<string> without_n = temp;
        for(int i = 0;i < temp.size()-1;i++) 
        {
            allSubsets.push_back(with_n[i] + a[a.length()-1]);
            allSubsets.push_back(without_n[i]);
        }
    }
    return allSubsets;

}

但是,似乎有人出错了:从递归调用到递归调用,tempallSubsets的大小仍然是静态的,而由于push_back()调用,它们的大小应该会增加。有什么原因会这样吗?

EN

Stack Overflow用户

回答已采纳

发布于 2015-03-25 20:48:26

这是因为你犯了一个错误。因为这发生在下一个大小写中,所以永远不会插入任何条目。

因为第一个无效的索引是temp.size(),所以i < temp.size()意味着您将始终拥有一个有效的索引。减去1意味着你遗漏了向量的最后一个元素。

值得注意的是,将allSubsets作为参数传入是有点愚蠢的,因为它总是空的。这种算法根本不需要第二个参数。其次,您可以更有效地使用散列集,它可以简单、快速地为您执行去重复。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29265981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档