lintcode k数和||

作者: yzawyx0220 | 来源:发表于2017-01-18 17:19 被阅读90次

    给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。    
    在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
    样例
    给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
    题目链接:http://www.lintcode.com/zh-cn/problem/k-sum-ii/

    典型的深度优先搜索,当然这道题可以返回res.size()得到上一题的结果,但是这样的效率太低了。

    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> > res;
            vector<int> temp;
            sum(A,k,target,temp,res,0);
            return res;
        }
        void sum(vector<int> A,int k,int target,vector<int> &temp,vector<vector<int> > &res,int i) {
            if (k == 0 && target == 0) {
                res.push_back(temp);
                return;
            }
            if (i == A.size() || target < 0) return;
            temp.push_back(A[i]);
            sum(A,k - 1,target - A[i],temp,res,i + 1);
            temp.pop_back();
            sum(A,k,target,temp,res,i + 1);
        }
    };
    
    

    相关文章

      网友评论

        本文标题:lintcode k数和||

        本文链接:https://www.haomeiwen.com/subject/vclbbttx.html