回溯法即可
void cbhelp(vector<vector<int>> &res,vector<int> &v,int target,int i,vector<int> recp) { if(target<0) return; else if(target==0) { res.push_back(recp); return; } for(unsigned int k=i;k<v.size();++k) { recp.push_back(v[k]); cbhelp(res,v,target-v[k],k,recp); recp.pop_back(); if(target-v[k]<0) return; } } vector<vector<int>> combinationSum(vector<int>& v, int target) { sort(v.begin(),v.end()); vector<vector<int>> res; vector<int> recp; cbhelp(res,v,target,0,recp); return res; }