LeetCode第40题之Combination Sum II

来源:互联网 发布:北京棉花检验数据平台 编辑:程序博客网 时间:2024/05/19 00:12

这一题主要是在上一题的基础上解决重复解的问题。
C++代码:

#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution {private:    //res保存满足题意的结果    vector<vector<int>> res;    //保存当前的一种方案    vector<int> method;public:    void fun(int n, int sum, vector<int> &candidates, int target, vector<int> &method, vector<vector<int>> &res)    {        if (target == sum)        {            res.push_back(method);            return;        }        for (int i=n;i<candidates.size();++i)        {            //同一层次不能出现相同的元素            if (i>n && candidates[i] == candidates[i-1])                continue;            //剪枝            if (candidates[i]+sum > target)                return;            method.push_back(candidates[i]);            fun(i+1, sum+candidates[i], candidates, target, method, res);            method.pop_back();        }    }    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {        sort(candidates.begin(), candidates.end());        fun(0, 0, candidates, target, method, res);        return  res;    }};int main(){    Solution s;    vector<int> canditates;    canditates.push_back(10);    canditates.push_back(1);    canditates.push_back(2);    canditates.push_back(7);    canditates.push_back(6);    canditates.push_back(1);    canditates.push_back(5);    vector<vector<int>> res = s.combinationSum2(canditates, 8);    for (vector<vector<int>>::iterator ita=res.begin();ita!=res.end();++ita)    {        for (vector<int>::iterator itb=ita->begin();itb!=ita->end();++itb)        {            cout<<*itb<<'\t';        }        cout<<endl;    }    cout<<endl;    return 0;}
0 0
原创粉丝点击