leetcode---combination-sum---dfs

来源:互联网 发布:西安交大远程网络教育 编辑:程序博客网 时间:2024/06/06 01:43

Given a set of candidate numbers ( C ) and a target number ( T ), find all unique combinations in C where the candidate numbers sums to T .
The same repeated number may be chosen from C unlimited number of times.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a 1, a 2, … , a k) must be in non-descending order. (ie, a 1 ≤ a 2 ≤ … ≤ a k).
The solution set must not contain duplicate combinations.

For example, given candidate set2,3,6,7and target7,
A solution set is:
[7]
[2, 2, 3]

class Solution {public:    void dfs(int dep, int n, vector<vector<int> > &ans, vector<int> &tmp,                                       vector<int> &candidates, int target)    {        if(target == 0)        {            ans.push_back(tmp);            return;        }        for(int i=dep; i<n && target - candidates[i] >= 0; i++)        {            tmp.push_back(candidates[i]);            dfs(i, n, ans, tmp, candidates, target-candidates[i]);            tmp.pop_back();        }    }    vector<vector<int> > combinationSum(vector<int> &candidates, int target)     {        vector<vector<int> > ans;        vector<int> tmp;        int n = candidates.size();        sort(candidates.begin(), candidates.end());        dfs(0, n, ans, tmp, candidates, target);        return ans;    }};
原创粉丝点击