vector<int> candidates1, r1;
vector<vector<int>> r2;
void dfs(int cur, int sum, int start, int target) {
if (sum > target)
return;
if (sum == target)
{
r2.push_back(r1);
return;
}
for (int i = start; i < candidates1.size(); i++) {
int ok = 1;
//去重的判断。
if (i > 0 && candidates1[i] == candidates1[i - 1] && i != start)
ok = 0;
if (ok)
{
r1.push_back(candidates1[i]);
dfs(cur + 1, sum + candidates1[i], i + 1, target);
r1.pop_back();
}
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
candidates1 = candidates;
dfs(0, 0, 0, target);
return r2;
}