LeetCode: Combination Sum

来源:互联网 发布:mysql显示表字段 编辑:程序博客网 时间:2024/06/07 10:24

思路:回溯搜索,先对数组排好序,然后从前往后搜索,记录当前已经累加的和当前已经加进来的元素。如果当前和已经等于目标值,加入到解中间去,如果大于目标值,回溯(因为已经排好序,不需要再搜索后面更大的元素),如果小,则加入当前元素(保证重复加入)。

code:

class Solution {public:    void solveSum(vector<int> &A, int pos, int target, vector<int> curRet, int curSum, vector<vector<int> > &ret){        if(curSum == target){           ret.push_back(curRet);           return;        }        else if(curSum > target) return;        for(int i = pos;i < A.size();i++){            vector<int> temp = curRet;            temp.push_back(A[i]);            solveSum(A,i,target,temp,curSum+A[i],ret);        }    }    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {        vector<vector<int> > ret;        vector<int> curRet;        sort(candidates.begin(),candidates.end());        solveSum(candidates,0,target,curRet,0,ret);        return ret;    }};


0 0
原创粉丝点击