Difficulty: 3
Frequency: 3
Problem:
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
- All numbers (including target) will be positive integers.
- Elements in a combination (a1, a2, � , ak) must be in non-descending order. (ie, a1 ? a2 ? � ? ak).
- The solution set must not contain duplicate combinations.
For example, given candidate set 2,3,6,7
and
target 7
,
A solution set is:
[7]
[2,
2, 3]
Solution:
class Solution {
public:
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(candidates.begin(), candidates.end());
vector<vector<int> > answer;
vector<int> combination;
DFS(answer, combination, 0, candidates, target, 0);
return answer;
}
void DFS(vector<vector<int> > & answer, vector<int> & combination, int sum, vector<int> & candidates, int target, int order)
{
for (int i = order; i<candidates.size(); i++)
{
int temp_sum = sum + candidates[i];
if (temp_sum == target)
{
answer.push_back(combination);
answer[answer.size()-1].push_back(candidates[i]);
}
else if (temp_sum < target)
{
combination.push_back(candidates[i]);
DFS(answer, combination, temp_sum, candidates, target, i);
combination.pop_back();
}
}
}
};
Notes:
Typical DFS.