首页 > 代码库 > [LeetCode] Combination Sum

[LeetCode] Combination Sum

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 (a1, a2, … , ak) must be in non-descending order. (ie, a1a2 ≤ … ≤ ak).
  • The solution set must not contain duplicate combinations.

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

以下是我 AC 的代码:

/** * author:Zhou Jianxin */class Solution {public:    vector<vector<int> > combinationSum(vector<int> &candidates, int target)     {         sort(candidates.begin(), candidates.end());         vector<vector<int>> ret;         vector<int> path;         combinationSumRec(candidates, target, ret, path, 0);         return ret;    }    private:    void combinationSumRec(const vector<int> &candidates,                           int target,                           vector<vector<int>> &ret,                           vector<int> &path,                           size_t index)    {        if (target == 0)        {            ret.push_back(path);            return;        }                int prev = -1;                for (size_t ix = index; ix != candidates.size(); ++ix)        {            if (candidates[ix] > target)            {                return;            }                        if (candidates[ix] == prev)            {                continue;            }                        path.push_back(candidates[ix]);            combinationSumRec(candidates, target - candidates[ix], ret, path, ix);            path.erase(path.end() - 1);            prev = candidates[ix];        }    }};

[LeetCode] Combination Sum