这道题是LeetCode里的第39道题。

题目描述:

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。

示例 1:

输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[[7],[2,2,3]
]

示例 2:

输入: candidates = [2,3,5], target = 8,
所求解集为:
[[2,2,2,2],[2,3,3],[3,5]
]

首先一看到题目我能想到的就是递归,但感觉递归太简单实现了,而且递归函数参数多(想起八皇后问题),想试试别的方法,一看评论区,绝大多数都是回溯剪枝法,递归法,DFS。其实一看代码其实这三种方法几乎一样。

示例二图:

当总和大于等于8时,就可以剪枝了,也就是说后面已经没有了答案。

解题代码:

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

然后想优化代码,优化就是为了剪枝,缩短运行时间。以下是优化结果,但是运行结果是错的。原因在于我之前写的代码已经具备的剪枝的效果,我后面这样写画蛇添足了。

class Solution {
public:vector<vector<int>> res;vector<int> ans;bool getres(vector<int>& candidates,int target,int k,vector<int> ans){int size=candidates.size();for(int i=k;i<size;i++){if(target-candidates[i]>0){ans.push_back(candidates[i]);if(getres(candidates,target-candidates[i],i,ans)){ans.pop_back();return false;}ans.pop_back();}else if(target-candidates[i]<0){return true;}else{ans.push_back(candidates[i]);res.push_back(ans);ans.pop_back();return false;}}return false;}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {sort(candidates.begin(),candidates.end());getres(candidates,target,0,ans);return res;}
};

提交结果:

个人总结:

本题的数据是可以重复的,可重复加深了答案的深度。还有我一开始没有对数据进行排序,导致一次错误,如果不排序的话,想要得出答案会很麻烦,剪枝步骤也会变得毫无意义,尤其是在大数据下,对数据进行先排序后处理,时间上的优势可以明显的表现出来。

转载于:https://www.cnblogs.com/1000sakura/p/10743306.html

【LeetCode】Combination Sum(组合总和)相关推荐

  1. 39. Combination Sum 组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...

  2. Leetcode39.Combination Sum组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...

  3. 【LeetCode】#39组合总和(Combination Sum)

    [LeetCode]#39组合总和(Combination Sum) 加粗样式 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数 ...

  4. LeetCode Combination Sum IV(动态规划)

    问题:给出一个数组nums和目标数target,问有多少组合形式 思路:用dp(i)表示目标数target的组合数.则有状态转移关系为dp(i)=sum(dp(i-nums[j])),其中i>= ...

  5. leetcode系列--40.组合总和 II

    leetcode系列–第40题.组合总和 II 给你一个由候选元素组成的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合 ...

  6. leetcode系列--39.组合总和

    leetcode系列–第39题.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 ...

  7. leetcode系列--216.组合总和 III

    leetcode系列–第216题.组合总和 III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字.说明:所有数字都是正整数.解集不 ...

  8. leetcode算法题--组合总和

    原题链接:https://leetcode-cn.com/problems/combination-sum/ 1.回溯 class Solution {public:vector<vector& ...

  9. LeetCode Combination Sum

    因为实验室项目好久没刷题了.从今天开始重新开始刷题. Given a set of candidate numbers (C) and a target number (T), find all un ...

  10. 【leetcode】377. 组合总和 Ⅳ(combination-sum-iv)(DP)[中等]

    链接 https://leetcode-cn.com/problems/combination-sum-iv/ 耗时 解题:37 min 题解:41 min 题意 给你一个由 不同 整数组成的数组 n ...

最新文章

  1. PAT(甲级)2020年秋季考试 7-4 Professional Ability Test
  2. OpenGL 帧缓冲区
  3. python的编译器有哪些-python的编译器有哪些
  4. servlet 源码分析
  5. 4.1_ 1_ 初识文件管理
  6. 多目标函数 matlab 粒子群_【LIBSVM】基于群智能优化算法的支持向量机 (SVM) 参数优化...
  7. .net core 获取机器码_.NET Core 反射获取所有控制器及方法上特定标签
  8. 【笔试/面试】—— 二叉树的深度和宽度
  9. ubuntu 下安装 phpmyadmin 过程记录
  10. 面试官:给我说说你对Java GC机制的理解?
  11. 程序设计入门c语言代码,C语言程序设计 入门源代码代码集合
  12. 使用WIFI通讯,手机秒变单片机大屏显示器
  13. 2022年医院三基考试药师(中医临床)考试模拟试题卷及答案
  14. 详解网易AI布局,三大AI产品矩阵浮出水面
  15. C++系列(关键字static)
  16. singleton模式 C++
  17. WARN Error while fetching metadata with correlation id 5 : {testtopic=LEADER_NOT_AVAILABLE}
  18. etal斜体吗 参考文献_参考文献方面毕业论文格式模板,与文下载****北京化工大学学报相关论文下载...
  19. 代谢组+基因组联合分析
  20. 亲测有效IEEE数据库论文免费下载

热门文章

  1. vip会员统计表 (vip等级是灵活配置的 非写死1是金卡用户 2是什么 等)
  2. py2exe使用方法
  3. Square(hdu 1511)
  4. sql server的数据同步
  5. 【CS224N笔记】一文详解神经网络来龙去脉
  6. 【论文】本周论文推荐(迁移学习、阅读理解、对话系统、图神经网络、对抗生成网络等)...
  7. 三分钟教你如何PyTorch自定义反向传播
  8. [NAACL19]一个更好更快更强的序列标注成分句法分析器
  9. LeetCode刷题——345. 反转字符串中的元音字母
  10. 看半小时漫画,通晓计算机基础