为什么我的结果中有 0?我不知道它从哪里来

why I have 0 in my result? I don't know where it comes

本文关键字:我不知道 结果 我的 为什么      更新时间:2023-10-16
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);
}
相关文章: