您的位置:首页 > 其它

[LeetCode] 39. Combination Sum

2016-07-20 19:39 519 查看
思路:

又是一道典型的DFS问题, 做了数独和生成括号的同学应该对这种问题不陌生了. 注意之前一定要排序! 因为这道题说明了元素可以出现, 所以for循环中的DFS要传i自己, 如果是combination sum 2的问题, 就要传i + 1.

void dfs(vector<int>& candidates,
vector<vector<int>>& res,
vector<int>& comb,
int begin,
int target) {
if (! target)
return res.push_back(comb);
for (int i = begin; i < candidates[size] && candidates[i] <= target; i++) {
comb.push_back(candidates[i]);
dfs(candidates, res, comb, i, target - candidates[i]);
comb.pop_back();
}
}

vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> res;
if (candidates.empty()) return res;
// 别忘了排序!!!
sort(candidates.begin(), candidates.end());
vector<int> comb;
dfs(candidates, res, comb, 0, target);
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode dfs