k数和 II

来源:互联网 发布:网络电影投资 编辑:程序博客网 时间:2024/04/29 11:08

给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。    

在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。


样例 给出[1,2,3,4],k=2, target=5,返回[[1,4],[2,3]]

class Solution {public:    /**     * @param A: an integer array.     * @param k: a positive integer (k <= length(A))     * @param target: a integer     * @return a list of lists of integer      */    vector<vector<int> > kSumII(vector<int> A, int k, int target) {        // write your code here        vector<vector<int> > result;        int n = A.size();        if (n < 1)        {            return result;        }        sort(A.begin(), A.end());        vector<int> buf;        int sum = 0;        visit(A, k, 0, n, sum, target, buf, result);        return result;    }private:    void visit(vector<int> &A, int k, int pos, int n, int &sum, int target, vector<int> &buf, vector<vector<int> > &result)    {        if (k == 0)        {            if (sum == target)            {                result.push_back(buf);            }            return;        }        if (sum > 0 && target > 0 && sum > target)        {            return;        }        if (pos >= n)        {            return;        }        sum += A[pos];        buf.push_back(A[pos]);        visit(A, k-1, pos+1, n, sum, target, buf, result);        sum -= A[pos];        buf.pop_back();        visit(A, k, pos+1, n, sum, target, buf, result);    }};


0 0
原创粉丝点击