[LeetCode] 39. Combination Sum

来源:互联网 发布:凯斯西储大学轴承数据 编辑:程序博客网 时间:2024/06/05 23:55

思路:
又是一道典型的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;}
0 0
原创粉丝点击