class Solution { public: void DFS(int left, int ptr, vector& candidates, vector>& ret, vector& pre) { if(left == 0) { ret.push_back(pre); return; } while(ptr < candidates.size() && candidates[ptr] > left) { ptr += 1; } for(int i = ptr; i < candidates.size(); i++) { pre.push_back(candidates[i]); DFS(left - candidates[i], i, candidates, ret, pre); pre.pop_back(); } return; } vector> combinationSum(vector& candidates, int target) { sort(candidates.begin(), candidates.end(), greater()); // ε…ˆζŽ’εΊ vector> ret; vector pre; DFS(target, 0, candidates, ret, pre); return ret; } };