LC39 Combination Sum
还是利用深搜的思想,注意一个元素可以取无数次。而LC40 Combination Sum II 就有次数限制,有次数限制的情况下可以先判断一个数是否与它前面的数相等,若相等则跳过该元素,直到找到一个数与它前面的数不等,再进行深搜。
这里附上LC39的代码
1 class Solution { 2 public: 3 vector<vector<int>> result; 4 void dfs(int start,int n,int target,vector<int>& cand,vector<int> record) 5 { 6 int tar; 7 for(int i=start;i<n;i++) 8 { 9 tar=target; 10 vector<int> rec=record; 11 if(tar<cand[i]) 12 return; 13 while(tar>=cand[i]) 14 { 15 tar-=cand[i]; 16 rec.push_back(cand[i]); 17 if(tar==0) 18 { 19 result.push_back(rec); 20 break; 21 } 22 else if(tar<cand[i]) 23 break; 24 dfs(i+1,n,tar,cand,rec); 25 } 26 } 27 } 28 vector<vector<int>> combinationSum(vector<int>& candidates, int target) { 29 if(candidates.size()==0||target<=0) 30 return result; 31 sort(candidates.begin(),candidates.end()); 32 vector<int> record; 33 dfs(0,candidates.size(),target,candidates,record); 34 return result; 35 } 36 };
View Code
附上一段更简洁的代码
1 class Solution { 2 public: 3 vector<vector<int> > combinationSum(vector<int> &nums, int target) { 4 sort(nums.begin(), nums.end()); 5 vector<vector<int> > result; 6 vector<int> intermediate; 7 dfs(nums, target, 0, intermediate, result); 8 return result; 9 } 10 private: 11 void dfs(vector<int>& nums, int gap, int start, vector<int>& intermediate, 12 vector<vector<int> > &result) { 13 if (gap == 0) { 14 result.push_back(intermediate); 15 return; 16 } 17 for (size_t i = start; i < nums.size(); i++) { 18 if (gap < nums[i]) return; 19 intermediate.push_back(nums[i]); 20 dfs(nums, gap - nums[i], i, intermediate, result); 21 intermediate.pop_back(); 22 } 23 } 24 };
View Code
转载于:https://www.cnblogs.com/vaecn/p/5350152.html
LC39 Combination Sum相关推荐
- 40. Combination Sum II 组合总和 II
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...
- 216. Combination Sum III
/** 216. Combination Sum III * 2016-6-12 by Mingyang* i一定要取到9,虽然大小聪明,想只取到7,但是后面的遍历可能也会遍历到9啊.* 1.长度标准 ...
- Combination Sum 和Combination Sum II
这两道题的基本思路和combination那一题是一致的,也是分治的方法. 其中combination Sum复杂一点,因为每个数可能用多次.仔细分析下,本质上也是一样的.原来是每个数仅两种可能.现在 ...
- 【动态规划】LeetCode 377. Combination Sum IV
LeetCode 377. Combination Sum IV Solution1: 我的未能AC的答案 题目描述的和前几道题差不多,但实际上不能用DFS来做(会超时),要用动态规划,还是记录一下吧 ...
- 【DFS】LeetCode 39. Combination Sum
LeetCode 39. Combination Sum Solution1: DFS,这个套路要熟记啊! class Solution { public:vector<vector<in ...
- 36 数字组合(Combination Sum)
文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.3 时间复杂度 2.4 空间复杂度 3 源码 1 题目 题目:数字组合(Combination Sum) 描述:给定一个候选数字的集合 ...
- 【LeetCode】#39组合总和(Combination Sum)
[LeetCode]#39组合总和(Combination Sum) 加粗样式 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数 ...
- LeetCode Combination Sum IV(动态规划)
问题:给出一个数组nums和目标数target,问有多少组合形式 思路:用dp(i)表示目标数target的组合数.则有状态转移关系为dp(i)=sum(dp(i-nums[j])),其中i>= ...
- LeetCode Combination Sum
因为实验室项目好久没刷题了.从今天开始重新开始刷题. Given a set of candidate numbers (C) and a target number (T), find all un ...
最新文章
- mysql实现sass_使用sass绘制三角形
- linux下的hive命令大全,Hive shell 常用命令
- 取消管理员取得所有权_企业取得违约补偿款是否一律应缴增值税呢?
- spring-boot基础概念与简单应用
- SpringMVC原理及非注解配置详解
- 计算机应用专业特色建设情况,【计算机应用论文】计算机应用类专业建设和革新探索(共3022字)...
- 自动采集电脑壁纸PHP源码美化版
- Nodejs V8引擎 fast property lookup
- configure make make install in linux
- xilinx sdk在Debug模式下根据地址在内存里观察值
- 精益管理研究院陈逸超 | 用精益思维创造数据价值金矿
- 详细的568A和568B线序
- 【Android工具】神器来了,游戏安装加速器ourplay,重点:附赠强大免费gmail邮箱注册...
- unity 粒子插件_unity的基本认识——走进unity
- 分布式键值存储ETCD
- 关于App置灰黑白化的探索
- gnome桌面显示计算机,使用 GNOME 桌面
- 中国民航飞行学院人事薪资管理系统实践案例
- 做好如何融洽处理人际关系文章 把握是前言
- 全国二级c语言上机题库答案,二级C语言上机题库100题加答案