90 lintcode k数和

class Solution {

public:

    /*

    * @param A: an integer array

    * @param k: a postive integer <= length(A)

    * @param target: an integer

    * @return: A list of lists of integer

    */

    vector> kSumII(vector &A, int k, int target) {

        // write your code here

        vector >result;

        vectortemp;

        DFS(A,k,target,0,0,result,temp);

        return result;

       

    }

    void  DFS(vector &A, int k, int target,int sum,int index,vector >&result,vector&temp)

    {

        if(temp.size()==k&&sum==target)

        {

          result.push_back(temp);

          return ;

        }

        if(index==A.size()||sum>target)

        return;

        temp.push_back(A[index]);

        DFS(A,k,target,sum+A[index],index+1,result,temp);

        temp.pop_back();

        DFS(A,k,target,sum,index+1,result,temp);

       

    }

temp.push_back()

Temp.pop_back();

必须配对使用而且与跟随语句的位置无关,这两个的使用可以保证,在退出当前的递归之后,不会对上一个的递归状态产生影响。

你可能感兴趣的:(90 lintcode k数和)