lintcode-153-数字组合 II
2017-07-30 18:34
351 查看
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; } };
相关文章推荐
- lintcode(153)数字组合 II
- lintcode-64-合并排序数组 II
- [LintCode] 带环链表 II Linked List Cycle II
- Lintcode(198) Permutation Index II
- lintcode,翻转链表 II
- 数字组合 II
- lintcode- k数和II-90
- 寻找丢失的数 II-LintCode
- 单词拆分II-LintCode
- Lintcode 最大子数组 II
- [LintCode]Paint House II
- 合并排序数组 II——LintCode
- LintCode: Single Number II
- LintCode-数字组合 II
- LintCode:数字组合
- Lintcode: Interval Sum II
- LintCode-硬币排成线 II
- [LintCode] Coins in a Line II
- [Lintcode]Find Minimum in Rotated Sorted Array II
- lintcode-103-带环链表 II