LeetCode: Combination Sum II

来源:互联网 发布:linux多核cpu工作原理 编辑:程序博客网 时间:2024/06/06 05:50

Given a collection of candidate numbers (C) and a target number (T), find all unique combinations inC where the candidate numbers sums to T.

Each number in C may only be used once in the combination.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

For example, given candidate set [10, 1, 2, 7, 6, 1, 5] and target8,
A solution set is:

[  [1, 7],  [1, 2, 5],  [2, 6],  [1, 1, 6]]
class Solution {    private:    int index_count;    vector<vector<int> > results;    public:    void backtrace(int target, int sum, vector<int>& candidates, vector<int>& index, int id, int n)    {        if (sum > target) {            return;        }        if (sum == target)        {            vector<int> result;            for (int i = 1; i <= n; ++i)            {                result.push_back(candidates[index[i]]);            }            results.push_back(result);            return;        }                // To avoid repeat         for (int i = id + 1; i < candidates.size(); ++i)        {            index[n+1] = i;            backtrace(target, sum + candidates[i], candidates, index, i, n+1);            while(i < candidates.size() && candidates[i] == candidates[i+1]) {   // remove repeat numbers                i++;            }                    }    }        vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {        sort(candidates.begin(), candidates.end());                vector<int> real_cdts;        for (int i = 0; i < candidates.size(); ++i) {            if (candidates[i] <= target) {                real_cdts.push_back(candidates[i]);            }            else {                break;            }        }                index_count = 10000;        vector<int> index = vector<int>(index_count, 0);                results.clear();        backtrace(target, 0, real_cdts, index, -1, 0);                return results;    }};


0 0
原创粉丝点击