版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/artisans/article/details/88831922
class Solution {
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
vector<int> flags(candidates.size(), 0);
dfs(candidates, flags, 0, target);
return _ret;
}
void dfs(vector<int>& candidates, vector<int>& flags, int index, int target)
{
int sum = 0;
for (int i = 0; i < candidates.size(); i++)
{
sum += flags[i] * candidates[i];
}
if (sum == target)
{
vector<int> TMP;
for (int i = 0; i < candidates.size(); i++)
{
if(flags[i])
{
TMP.push_back(candidates[i]);
//cout << candidates[i] << "\t";
}
}
sort(TMP.begin(), TMP.end());
if (_set.find(TMP) == _set.end())
{
_set.insert(TMP);
_ret.push_back(TMP);
}
//cout << "\n";
}
else if(sum > target)
{
return;
}
else
{
for (int i = index; i < candidates.size(); i++)
{
flags[i] = 1;
dfs(candidates, flags, i + 1, target);
flags[i] = 0;
}
}
}
vector<vector<int>> _ret;
set<vector<int>> _set;
};