[Leetcode]_39 Combination Sum

来源:互联网 发布:北师大网络登录 编辑:程序博客网 时间:2024/06/05 02:42
/** *  Index: 39 *  Title: Combination Sum *  Author: ltree98 **/


给一组数字 和 目标值;然后找出所有能组合成目标值的数字组合。
用一个简单的回溯就够了。

注意两点:
1. 给定的数字按由低到高顺序
2. 数字可以重复


class Solution {private:    void traversalAll(vector<int>& candidates, int target, int index, vector<vector<int>>& ans, vector<int> perAns, int perAnsSum)  {        for(int i = index; i < candidates.size(); i++)  {            if(perAnsSum + candidates[i] == target) {                perAns.push_back(candidates[i]);                ans.push_back(perAns);                return;            }            else if(perAnsSum + candidates[i] < target)   {                perAns.push_back(candidates[i]);                perAnsSum += candidates[i];                traversalAll(candidates, target, i, ans, perAns, perAnsSum);                perAnsSum -= candidates[i];                perAns.pop_back();            }            else    {                return;            }        }    }public:    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {        std::sort(candidates.begin(), candidates.end());        vector<vector<int>> ans = vector<vector<int>>();        vector<int> perAns = vector<int>();        traversalAll(candidates, target, 0, ans, perAns, 0);        return ans;    }};