Leetcode_combination-sum-ii
来源:互联网 发布:网络嗅探器绿色版 编辑:程序博客网 时间:2024/06/06 16:55
地址:http://oj.leetcode.com/problems/combination-sum-ii/
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]
参考代码:
class Solution {public: void dfs(vector<vector<int>>&ans, vector<int>&num, vector<int>&visited, vector<int>tmpvec, int start, int target) { if(target==0) { if(find(ans.begin(), ans.end(), tmpvec)==ans.end()) ans.push_back(tmpvec); return; } if(start>=num.size()) return; if(!visited[start] && target-num[start]>=0) { visited[start] = true; tmpvec.push_back(num[start]); dfs(ans, num, visited, tmpvec, start+1, target-num[start]); tmpvec.pop_back(); visited[start] = false; dfs(ans, num, visited, tmpvec, start+1, target); } } vector<vector<int> > combinationSum2(vector<int> &num, int target) { vector<vector<int>>ans; if(num.empty()) return ans; sort(num.begin(), num.end()); vector<int>visited(num.size(), 0), tmpvec; dfs(ans, num, visited, tmpvec, 0, target); return ans; }};
这次写的去重要好一点
//SECOND TRIALclass Solution {private:vector<vector<int> >ans;vector<int>num;void dfs(vector<int>&vec, vector<bool>&visited, int left){if(!left){ans.push_back(vec);return;}for(int i = 0; i<num.size(); ++i){if(num[i] > left)break;if(i && num[i]==num[i-1] && !visited[i-1])continue;if(!visited[i] && (vec.empty() || num[i]>=vec.back())){visited[i] = true;vec.push_back(num[i]);dfs(vec, visited, left-num[i]);vec.pop_back();visited[i] = false;}}}public:vector<vector<int> > combinationSum2(vector<int> &num, int target) {if(num.empty())return ans;vector<int>vec;sort(num.begin(), num.end());this->num = num;vector<bool>visited(num.size(), false);dfs(vec, visited, target);return ans;}};
0 0
- LeetCode_Combination Sum II
- Leetcode_combination-sum-ii
- LeetCode_Combination Sum II
- leetcode_Combination Sum II
- LeetCode_Combination Sum
- Leetcode_combination-sum
- LeetCode_Combination Sum
- leetcode_Combination Sum
- Leetcode_Combination Sum
- leetcode_Combination Sum III
- Leetcode_Combination Sum III
- Leetcode_Combination Sum 回溯法
- 【Leetcode】Path Sum II (Sum)
- Combination Sum && Combination Sum II
- Combination Sum Combination Sum II
- Combination Sum II
- LeetCode: Combination Sum II
- LeetCode: Combination Sum II
- UNIX Network Programming笔记之第十一章(二)
- 二进制操作
- 帧、行、场
- ISO/IEC 9126软件质量标准
- Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazy
- Leetcode_combination-sum-ii
- 盘手串
- Ubuntu adb devices : no permissions
- KMP字符串模式匹配详解
- 笔记18--ViewHolder
- java中对象的比较---==与equals的使用注意事项
- Linux命令集
- 60 Linux 常用 命令
- eclipse插件