在 pushback() 调用 powerset 函数后向量大小保持静态
vector size remaining static after pushback() calls for powerset function
我编写了以下函数,作为 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()
它们应该增加电话。有什么原因会发生这种情况吗?
这是因为你有一个差一错误。因为这发生在您的 next-to-base 案例中,所以您永远不会插入任何条目。
由于第一个无效索引是 temp.size()
,i < temp.size()
意味着您将始终拥有一个有效索引。减去 1 意味着您缺少向量的最后一个元素。
值得注意的是,将 allSubsets
作为参数传递进来有点傻,因为 它始终为空 。这种算法根本不需要第二个参数。其次,您可以更高效地使用可以为您简单快速地执行重复数据删除的哈希集。
我编写了以下函数,作为 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()
它们应该增加电话。有什么原因会发生这种情况吗?
这是因为你有一个差一错误。因为这发生在您的 next-to-base 案例中,所以您永远不会插入任何条目。
由于第一个无效索引是 temp.size()
,i < temp.size()
意味着您将始终拥有一个有效索引。减去 1 意味着您缺少向量的最后一个元素。
值得注意的是,将 allSubsets
作为参数传递进来有点傻,因为 它始终为空 。这种算法根本不需要第二个参数。其次,您可以更高效地使用可以为您简单快速地执行重复数据删除的哈希集。