Combination Sum
来源:互联网 发布:js 添加div classname 编辑:程序博客网 时间:2024/06/04 18:35
题目:Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
For example, given candidate set 2,3,6,7
and target 7
,
A solution set is: [7]
[2, 2, 3]
思路:回溯法+深度优先
当然首先就是对数组排序,调用sort函数即可。关键在于回溯法;
编写的一个sumHelper函数,前面两个分别为候选数字,目标数字,后面是在目标数组中的索引值,和目标数组长度.
一开始,不会,因为是求和,而不是判断,后来查看程序,发现使用一个target是否为0的判断即可,化和为差,如果求出来和是目标数字,那么刚刚的和与目标数字的差即为0,非常棒的想法。
对于这类题目,思路只能讲到这里,还是把实例中的各种顺序罗列出来,应该能够方便大家理解的。
2,3,6,7 并且目标数字为 7,
2,2,2,2 --- 2,2,3 --- 2 , 2 ,6 --- 2 , 3 ,3 --- 2,6 , 6
...........
大体过程如此所所示。
代码:
class Solution {public:// vector<int>temp; vector<vector<int> >result; vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); sumHelper(candidates,target,0,candidates.size()); return result; } void sumHelper(vector<int>& candidates,int target,int index,int length){ //index代表数组索引值,length代表数组长度 if(target==0){ //这里很巧的是,别人用sum求和,他不用,他是相减,只要等于0了,就会存入数组中。 result.push_back(temp); return;//不需要返回 } if(index>=length||target<0){//因为是求减法,如果不相等,立即返回|| //还有一种是索引值大于数组长度 return; } for(int i=index;i<=length-1;i++){ temp.push_back(candidates[i]); sumHelper(candidates,target-candidates[i],i,length); temp.pop_back(); } }};
0 0
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- C++引用
- 前景提取--special basic model
- CH Round#48 4和7
- 内存DC和屏幕DC
- Java(JDK)的加密技术
- Combination Sum
- 欢迎使用CSDN-markdown编辑器
- 让手机支持OTG,不看绝对后悔! - 我也做一回搬运工,解决RFID读卡器OTG支持问题
- MySQL 转换函数与运算符
- 黑马程序员——IO概述之字符流
- Java设计模式之工厂设计模式
- 解析C++编程中的继承方面的运用
- 终于不用再苦逼地写文档了!一步步教你如何生成可调试的API
- bestcoder+置换群组成的各自环后减一累加