Leetcode 40 - Combination Sum II
2016-01-25 08:38
435 查看
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The solution set must not contain duplicate combinations.
For example, given candidate set 10,1,2,7,6,1,5 and target 8,
A solution set is:
[1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
思路:与Leetcode 39思路大致相同,依然使用深度优先搜索。本题还应考虑如何防止产生重复解。
Each number in C may only be used once in the combination.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
The solution set must not contain duplicate combinations.
For example, given candidate set 10,1,2,7,6,1,5 and target 8,
A solution set is:
[1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
思路:与Leetcode 39思路大致相同,依然使用深度优先搜索。本题还应考虑如何防止产生重复解。
class Solution { public: vector<vector<int> > combinationSum2(vector<int> &num, int target) { sort(num.begin(),num.end()); vector<int> temp; vector<vector<int>> result; dfs(num,target,0,temp,result); return result; } private: void dfs(vector<int> &num,int gap,int start,vector<int> &temp,vector<vector<int>> &result){ if(gap==0) { result.push_back(temp); return; } int previous = -1; //记录本次递归选择的数,防止重复 for(int i=start;i<num.size();i++) { //防止重复 if(num[i]==previous) continue; if(gap<num[i]) return; previous = num[i]; temp.push_back(num[i]); dfs(num,gap-num[i],i+1,temp,result); temp.pop_back(); } } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性