Given a set of candidate numbers (C) and a target number (T), find all unique combinations inC where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
2,3,6,7
and target
7
,
[7]
[2, 2, 3]
注意:元素可以重复选择。
class Solution { void helper(vector<int> &base,vector<vector<int> > &res,vector<int>& can,int left){ int max=base.empty()?INT_MIN:base.back(); //选择暂存数组base的最大值 for(auto &e:can){ if(e<max) //因为暂存数组必须是升序,所以如果e小于末尾元素则不考虑 continue; if(e==left){ //递归终止的条件,left是剩余的和 base.push_back(e); res.push_back(base); base.pop_back(); }else if(e<left){ base.push_back(e); helper(base,res,can,left-e); base.pop_back(); }else //因为candidates是递增数组 break; } } public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int> > res; if(candidates.empty()||target<=0) return res; vector<int> base; sort(candidates.begin(),candidates.end()); helper(base,res,candidates,target); return res; } };