我尝试用c ++运行这个程序,但它不起作用。它说错误:在"{"标记之前预期的主要表达式


#include<iostream>
#include<map>
#include<vector>
using namespace std;
map<int, vector<int>> dp;
vector<int> howSum(int& target, vector<int>& nums, vector<int> temp){
if (target == 0) return temp;
if (target < 0) return {};
if (dp.find(target) != dp.end()) return dp[target];
for (int i=0;i<nums.size();i++){  
dp[target]=howSum(target-nums[i],nums,temp.push_back(nums[i]));
if (dp[target]!={}) {return dp[target];}
}
return {};
}
int main(){
int n,target; cin>>n>>target; vector<int> nums(n);
for (int i=0;i<n;i++) cin>>nums[i];
vector<int> ans = howSum(target, nums, {});
if (ans.size()>0){
for(auto i:ans) cout<<i<<" ";
}
}

它说我错了"dp[target] = howSum(target-nums[i], nums,temp.push_back(nums[i]));"它说,在{符号

之前期望的主表达式

这段代码的问题是,在作为参数传递给howSum函数的同一个向量上使用了vector类的push_back函数。

Push_back函数就地修改了vector,因此它改变了传递给函数的temp vector实参,当它返回时,返回修改后的temp vector,并通过引用传递给所有递归调用。因此,所有递归调用都在修改同一个向量,并且返回最后一次调用的修改版本。

要解决这个问题,可以在for循环中创建一个新向量,并将该向量传递给下一个递归调用

最新更新