Leetcode 39 Combination Sum

来源:互联网 发布:mac网络修复 编辑:程序博客网 时间:2024/05/20 01:13

题意

在候选集合C中选择数字(0个或多个),使它们的和为T。

题解

使用深度优先搜索。

参考:http://www.oschina.net/code/snippet_2399500_48909

代码

class Solution {public:    vector<vector<int> > result;    vector<int> temp;    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {        if(candidates.size() == 0)            return result;        sort(candidates.begin(), candidates.end());        dfs(candidates, 0, 0, target);        return result;    }    void dfs(vector<int> &candidates, int pos, int sum, int target)    {        if(sum == target)        {            result.push_back(temp);            return;        }        else if(sum > target)            return;        else        {            for(int i = pos; i < candidates.size(); i++) // 每个数字都可能有0~n个(n满足n * candidates[i] <= target)            {                temp.push_back(candidates[i]);  //记录当前第i个数字(0~n个)的可行路径                dfs(candidates, i, sum + candidates[i], target);//先递归到n个candidates[i],然后n-1,n-2...1                temp.pop_back();   // 恢复到递归结束条件的路径中的上一个节点            }        }    }};
0 0