40. Combination Sum II

来源:互联网 发布:知商金融 跑路 编辑:程序博客网 时间:2024/06/16 13:47

problem:

Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C 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 target 8
A solution set is: 

[  [1, 7],  [1, 2, 5],  [2, 6],  [1, 1, 6]]

和上一题类似,也是使用深度搜索优先算法。注意这里递归时,要使用下一位即可。

class Solution {public:    vector<vector<int>> result;    vector<int> temp = {};    void dfs(vector<int> candidates, int target, int sum, int j)    {                if(sum == target)        {            result.push_back(temp);            //return;        }        else if(sum > target)        {                        //return;        }        else        {            for(int i=j; i<candidates.size(); i++)            {                temp.push_back(candidates[i]);                dfs(candidates, target, sum+candidates[i], i+1);                temp.pop_back();            }        }    }    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {        vector<vector<int>> temp1;        if(candidates.empty())            return result;        sort(candidates.begin(), candidates.end());        dfs(candidates, target, 0, 0);        if(result.size() <= 1)            return result;        sort(result.begin(), result.end());        temp1.push_back(result[0]);        for(int i=1; i<result.size(); i++)        {            if(result[i-1] != result[i])            {                temp1.push_back(result[i]);            }        }        return temp1;    }};


0 0
原创粉丝点击