This is a classical combination question.
1 class Solution { 2 public: 3 void getComb(vector<vector<int> > &result, const vector<int> &num, vector<int> current, int sum, int target, int start) { 4 if (sum == target) { 5 result.push_back(current); 6 return; 7 } 8 if (sum > target) { 9 return; 10 } 11 for (int i = start; i < num.size(); i++) { 12 current.push_back(num[i]); 13 getComb(result, num, current, sum + num[i], target, i); 14 current.pop_back(); 15 } 16 } 17 vector<vector<int> > combinationSum(vector<int> &candidates, int target) { 18 vector<vector<int> > result; 19 sort(candidates.begin(), candidates.end()); 20 getComb(result, candidates, vector<int> (), 0, target, 0); 21 return result; 22 } 23 };
组合求和问题解析
本文介绍了一种解决组合求和问题的经典算法。该算法通过递归实现,输入为一组候选数和目标数,输出所有可能的组合使得组合内的数相加等于目标数。文章提供了详细的C++代码实现,并对关键步骤进行了注释。
3765

被折叠的 条评论
为什么被折叠?



