题目:给定一个整型数组,和一个Target值,数组中的每个值都只可使用一次,求所有由数组中的值组成的集合,集合之和等于target。
思路:基本背包问题
class Solution {
public:
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
vector<vector<int>> result;
sort(num.begin(),num.end());
vector<int> temp;
find_temp(num,0,temp,target,result);
return result;
}
void find_temp(vector<int> &num,int next,vector<int> &temp,int target,vector<vector<int>> &result){
if(target==0){
result.push_back(temp);
return;
}
if((target-num[next])<0||next>=num.size())return;
temp.push_back(num[next]);
find_temp(num,next+1,temp,target-num[next],result);
temp.pop_back();
while(num[next]==num[next+1])next++;
find_temp(num,next+1,temp,target,result);
}
};