【发布时间】:2015-05-29 17:35:11
【问题描述】:
我编写了以下函数,作为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;
}
但是,似乎有人出了问题:temp 和 allSubsets 的大小从递归调用到递归调用保持不变,而由于push_back() 调用它们应该增加。有什么理由会发生这种情况吗?
【问题讨论】:
-
将参数
allSubsets更改为通过引用而不是通过值传递。使用vector<string>& allSubsets。 -
这不是问题,因为他将更改返回到 allSubsets,然后推回他的本地 allSubsets。他的价值应该包括在内。
-
这似乎有许多不同的问题。正确的答案将需要处理所有这些。回答前请耐心等待!坦率地说,我对整个设计有点困惑。 getAllSubsets 不应该只接受一个参数,字符串吗?
标签: c++ string recursion vector powerset