153-数字组合 II

给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。C中每个数字在每个组合中只能使用一次。

注意事项

所有的数字(包括目标数字)均为正整数。

元素组合(a1, a2, … , ak)必须是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。

解集不能包含重复的组合。

样例

给出一个例子,候选数字集合为[10,1,6,7,2,1,5] 和目标数字 8 ,

解集为:[[1,7],[1,2,5],[2,6],[1,1,6]]

标签

回溯法 数组 深度优先搜索

思路

使用回溯加递归的方式,需要先对原数组排序,另外需要注意筛除重复的结果集

code

class Solution {
public:
/**
* @param num: Given the candidate numbers
* @param target: Given the target number
* @return: All the combinations that sum to target
*/
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
// write your code here
int size = num.size();
if (size <= 0) {
return vector<vector<int> >();
} sort(num.begin(), num.end());
vector<vector<int> > result;
vector<int> temp;
isInsert(result, temp, num, 0, 0, target); return result;
} void isInsert(vector<vector<int> > &result, vector<int> &temp, vector<int> &num, int current, int sum, int target) {
if (sum == target && !isExisted(result, temp)) {
result.push_back(temp);
return;
}
if (current < num.size() && sum < target) {
sum += num[current];
temp.push_back(num[current]);
isInsert(result, temp, num, current + 1, sum, target);
sum -= temp[temp.size() - 1];
temp.pop_back();
isInsert(result, temp, num, current + 1, sum, target);
}
} bool isExisted(vector<vector<int> > &result, vector<int> &temp) {
for (int i = 0; i < result.size(); i++) {
if (temp.size() == result[i].size()) {
int ret = true;
for (int j = 0; j < temp.size(); j++) {
if (temp[j] == result[i][j]) {
ret = ret & true;
}
else {
ret = ret & false;
}
}
if (ret == true) {
return true;
}
}
}
return false;
}
};

最新文章

  1. nginx日常运维
  2. fir.im Weekly - iOS 保持界面流畅的技巧
  3. HTML基本知识
  4. Linux 系统编程
  5. 第二百四十天 how can I 坚持
  6. Lua从入门到精通
  7. tomcat中有关配置文件的说明
  8. PHP的curl常用的5种写法
  9. EditText 默认不获取焦点,弹出软键盘布局变形解决方案
  10. vs c++配置opencv(1)
  11. 第七章 DAO模式
  12. php操作mongodb的常用函数
  13. Java作业五(2017-10-15)
  14. C# Cache 设定过期时间的方法
  15. Android 之 tools:context和tools:ignore两个属性的作用
  16. Docker的入门使用(初探总结)
  17. Linux更改中国时区
  18. 6.Spring MVC SSM整合问题总结
  19. 从0开始学golang--1.1--连接ms sql server数据库
  20. 在pixi中使用你的自定义着色器

热门文章

  1. Case Helper
  2. html 页面中的 base href 和 target
  3. python 基础练习题, 陆续添加中
  4. elasticsearch按范围聚合
  5. ...续上文(一个小萌新的C语言之旅)
  6. 手搓一个C语言简单计算器。
  7. UART学习之路(二)基本时序介绍
  8. HyperLedger Fabric 1.4 基础环境搭建(7)
  9. WebRTC中Android Demo中的摄像头从采集到预览流程
  10. USACO16OPEN_248&amp;&amp;USACO16OPEN_262144_KEY