一、思路:
DFS深度搜索,直到所有元素都被遍历。另外如果一组结果的求和大于target,剪枝返回
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>>res;
vector<int>resList;
DFS(candidates, res, resList, target, 0);
return res;
}
void DFS(vector<int>& candidates, vector<vector<int>>&res, vector<int>resList, int &target, int index) {
if (target == sum(resList)) {
res.push_back(resList);
resList.clear();
return;
}
else if (target < sum(resList)) {
resList.clear();
return;
}
while (index < candidates.size()) {
resList.push_back(candidates[index]);
DFS(candidates, res, resList, target, index);
index = index + 1;
resList.pop_back();
}
}
int sum(vector<int> resList) {
int sum = 0;
for (int i = 0; i < resList.size(); i++)
sum += resList[i];
return sum;
}
};