LeetCode 39. 组合总和
求全部的组合数一般使用深度优先搜索。
下面代码中dfs(result, candidates, combination, sum, i, target);
这条语句中第5个参数为从i
开始,是为了满足题目要求“解集不能包含重复的组合”,比如:[[2,2,3],[2,3,2],[3,2,2]]。
当然,如果题目需要这样的重复组合也输出的话,将这里的i
换为start
就好。
代码实现:
class Solution {
public:
void dfs(vector<vector<int>>& result, vector<int>& candidates,
vector<int>& combination, int sum, int start, int target) {
if (sum == target) {
result.push_back(combination);
return;
} else if (sum > target) {
return;
}
for (int i = start; i < candidates.size(); ++i) {
combination.push_back(candidates[i]);
sum += candidates[i];
dfs(result, candidates, combination, sum, i, target);
sum -= candidates[i];
combination.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> result;
vector<int> combination;
dfs(result, candidates, combination, 0, 0, target);
return result;
}
};