为什么我的结果中有 0?我不知道它从哪里来
why I have 0 in my result? I don't know where it comes
void ExhaustSet(const vector<int>& nums,
vector<vector<int>>& ans, int end) {
if (end == nums.size()) {
return;
}
if (end < 0) {
ans.push_back({});
ExhaustSet(nums, ans, end+1);
}
auto ans_copy = ans;
for (auto temp : ans_copy) {
temp.push_back(nums[end]);
ans.push_back(temp);
}
ExhaustSet(nums, ans, end+1);
}
vector<vector<int>> subsets(const vector<int>& nums) {
if (nums.empty()) {
return {};
}
vector<vector<int>> ans;
ExhaustSet(nums, ans, -1);
return ans;
}
int main()
{
auto ans = subsets({1,2,3});
for (const auto& e : ans) {
cout<<"(";
for (int num : e){
cout<<num<<", ";
}
cout<<")n";
}
return 0;
}
此代码尝试查找 {1,2,3} 的电源集,但此代码有问题。 首先,我做调试打印: () (1, ) (2, ) (1, 2, ) (3, ) (1, 3, ) (2, 3, ) (1, 2, 3, ) (0, )... 为什么我这里有 0? 谢谢!
问题出在算法的第一步,当 num == -1 时,开始递归步骤的那一步:
void ExhaustSet(const vector<int>& nums,
vector<vector<int>>& ans, int end) {
if (end == nums.size()) {
return;
}
if (end < 0) {
ans.push_back({});
ExhaustSet(nums, ans, end+1);
// ** HERE YOU NEED A RETURN STATEMENT
}
auto ans_copy = ans;
for (auto temp : ans_copy) {
temp.push_back(nums[end]);
ans.push_back(temp);
}
ExhaustSet(nums, ans, end+1);
}
。因此,一旦迭代结束,您再执行一个步骤,内侧为 -1,并且 nums[-1] 无效。
程序没有崩溃是一个奇迹。
void ExhaustSet(const vector<int>& nums,
vector<vector<int>>& ans, int end) {
if (end == nums.size()) {
return;
}
if (end < 0) {
ans.push_back({});
ExhaustSet(nums, ans, end+1);
return;
}
auto ans_copy = ans;
for (auto temp : ans_copy) {
temp.push_back(nums[end]);
ans.push_back(temp);
}
ExhaustSet(nums, ans, end+1);
}
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 我不知道这条线是做什么的
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 我不知道导致错误的原因 (C3074)
- 我不知道为什么这段代码会让核心被转储?
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 我不知道如何使用代码块win32 gui
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- if-else 语句仅按特定顺序工作,我不知道为什么
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么
- 程序输入名称和高度并显示它。我不知道如何显示列表中最高人的姓名和身高
- 函数抛出seg错误,我不知道为什么
- 我不知道为什么复制构造函数的调用在 c++ 中不稳定
- 我已经做了一个程序来使用队列链C++表显示学生姓名和身高,现在我想以我不知道如何显示的顺序显示它
- 我看过Stellarium代码,我不知道它从哪里开始
- 为什么我的结果中有 0?我不知道它从哪里来
- 我的代码结果为零,我不知道为什么
- C++,我不知道为什么我的函数不返回结果