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

时间:2015-03-25 20:34:29

标签: c++ string recursion vector powerset

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

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()调用而增加时。是否有任何理由发生这种情况?

1 个答案:

答案 0 :(得分:3)

这是因为你有一个一个一个错误。因为这发生在你的下一个基础案例中,所以你永远不会插入任何条目。

由于第一个无效索引为temp.size()i < temp.size()表示您始终拥有有效索引。减1表示您缺少向量的最后一个元素。

值得注意的是,将allSubsets作为参数传递是有点傻,因为它总是空的。这种算法根本不需要第二个参数。其次,使用可以简单快速地为您执行重复数据删除的哈希集可以提高效率。