Leetcode-Combine Sum II

来源:互联网 发布:怎么上架淘宝宝贝 编辑:程序博客网 时间:2024/06/05 22:50

求一个数组中所有的和等于target的组合。要求:

1.每个数最多只能使用一次

2.没有重复的组合

3.一个组合中的所有的数是升序排列的

third time:

class Solution {public:    vector<vector<int> > combinationSum2(vector<int> &num, int target) {        int len = num.size();        vector< vector<int> > res;        res.clear();        if(len == 0)        {            return res;        }        sort(num.begin(),num.end());// 脑残没有排序,题目要求是结果按照升序排列        vector<int> temp;        temp.clear();        combineHelper(num, target, 0, res, temp);        return res;    }    void combineHelper(vector<int> &num,int target,int index,vector< vector<int> > &res,vector<int> &temp)    {        if(target < 0)        {            return;        }else if(target == 0)        {            res.push_back(temp);            return;        }        int i,len;        len = num.size();        for(i = index; i < len; i++)        {            if(i != index && num[i] == num[i-1]) continue;//这里的去重比较好,不需要用used数组记录前面是否被访问过。对于同一层内的相同的数,只取第一个            temp.push_back(num[i]);            combineHelper(num, target - num[i], i+1, res, temp);            temp.pop_back();        }    }};


0 0
原创粉丝点击