一、题目
二、代码
class Solution
{
public:
vector<vector<int>> return_vector;
vector<int> path;
void back_track(int start_point,int size,vector<int>& candidates, int target)
{
int i;
int sum=0;
for(i=0;i<path.size();i++) sum+=path[i];
if(sum==target)
{
return_vector.push_back(path);
return;
}
if(sum>target) return;
for(i=start_point;i<size;i++)
{
if(i>=start_point+1&&candidates[i]==candidates[i-1]) continue;
path.push_back(candidates[i]);
back_track(i+1,candidates.size(),candidates,target);
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target)
{
return_vector.clear();
path.clear();
sort(candidates.begin(),candidates.end());
back_track(0,candidates.size(),candidates,target);
return return_vector;
}
};
三、运行结果