LeetCode39——Combination Sum

た 入场券 2022-08-09 09:38 126阅读 0赞

LeetCode39——Combination Sum

题意:

打个比方,现在盒子里面有小球,球上有数字,现在给定一个target,要求有放回的从盒子里面取小球,要求数字加起来为target的,把所有加起来为target的组合返回。

这道题的关键就在于数字可以重复取,也就是上述有放回(区别于LeetCode40——Combination Sum II)。

分别以序列中的每一个数字为根,每一层都可以是这个序列的任何数字,从根往下,直到数字加起来大于target(该情况返回上一层),或者等于target(该情况记录结果并返回上一层)。

代码:

  1. class Solution {
  2. private:
  3. void myFun(int sum,int start, vector<int>temp,vector<int>candidates, vector<vector<int>>&result,int target)
  4. {
  5. if (target == sum)
  6. {
  7. result.push_back(temp);
  8. return;
  9. }
  10. if (sum > target)
  11. {
  12. //temp.pop_back();
  13. return;
  14. }
  15. for (int i = start; i < candidates.size(); i++)
  16. {
  17. temp.push_back(candidates[i]);
  18. myFun(sum + candidates[i],i, temp, candidates, result, target);
  19. temp.pop_back();//回溯
  20. }
  21. }
  22. public:
  23. vector< vector<int> > combinationSum(vector<int>& candidates, int target) {
  24. sort(candidates.begin(), candidates.end());
  25. candidates.erase(unique(candidates.begin(), candidates.end()),candidates.end());
  26. vector<vector<int>> result;
  27. vector<int> temp;
  28. int start = 0;
  29. myFun(0, start,temp, candidates, result, target);
  30. return result;
  31. }
  32. };

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读