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<vector<int>> kSumII(vector<int> &A, int k, int target) {

        // write your code here

        vector<vector<int> >result;

        vector<int>temp;

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

        return result;

       

    }

    void  DFS(vector<int> &A, int k, int target,int sum,int index,vector<vector<int> >&result,vector<int>&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();

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容