Leetcode-Combination Sum ll(深搜)

来源:互联网 发布:中高端女装品牌 知乎 编辑:程序博客网 时间:2024/06/06 01:48
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]]


Seen this question in a real interview before

class Solution {public:    vector<vector<int>> ans;    void dfs(vector<int>& candidates, int target, int depth, int sum, vector<int> tmp)    {        if(sum > target)            return;        if(sum == target)        {            ans.push_back(tmp);            return;        }        for(int i=depth; i<candidates.size(); i++)        {                            tmp.push_back(candidates[i]);                dfs(candidates, target, i+1, sum+candidates[i], tmp);                tmp.pop_back();                while(i<candidates.size()-1 && candidates[i] == candidates[i+1])                    i++;                    }    }    vector<vector<int>> combinationSum2(vector<int>& candidates, int target)     {        vector<int> tmp;        sort(candidates.begin(), candidates.end());        dfs(candidates, target, 0, 0, tmp);        return ans;    }};

阅读全文
0 0