[leetcode] 40. Combination Sum II
来源:互联网 发布:robotart软件多少钱 编辑:程序博客网 时间:2024/06/05 08:25
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.
- 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]]
解法一:
跟 Combination Sum的区别主要是使用了set,然后把recursive中的i变成了i+1。
class Solution {public: vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { if(target==0) return{}; set<vector<int>> res; vector<int> out; sort(candidates.begin(), candidates.end()); combinationSum2(candidates, target, 0, out, res); return vector<vector<int>>(res.begin(), res.end()); } void combinationSum2(vector<int>& candidates, int target, int idx, vector<int> &out, set<vector<int>>& res){ if(target<0) return; else if (target==0) { res.insert(out); return; } for(int i = idx; i<candidates.size(); i++){ out.push_back(candidates[i]); combinationSum2(candidates, target-candidates[i], i+1, out, res); out.pop_back(); } }};
解法二:
在recursion的循环中,加上if(i>idx&&num[i]==nums[i-1]) continue。也就是如果当前的数字的值如果之前考虑过的话,就不要再考虑了。
class Solution {public: vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { if(target==0) return{}; vector<vector<int>> res; vector<int> out; sort(candidates.begin(), candidates.end()); combinationSum2(candidates, target, 0, out, res); return res; } void combinationSum2(vector<int>& candidates, int target, int idx, vector<int> &out, vector<vector<int>>& res){ if(target<0) return; else if (target==0) { res.push_back(out); return; } for(int i = idx; i<candidates.size(); i++){ if(i>idx&&candidates[i]==candidates[i-1]) continue; out.push_back(candidates[i]); combinationSum2(candidates, target-candidates[i], i+1, out, res); out.pop_back(); } }};
0 0
- [LeetCode]40.Combination Sum II
- LeetCode --- 40. Combination Sum II
- LeetCode 40.Combination Sum II
- [Leetcode] 40. Combination Sum II
- LeetCode 40. Combination Sum II
- [leetcode] 40. Combination Sum II
- 40. Combination Sum II LeetCode
- leetcode 40. Combination Sum II
- Leetcode 40. Combination Sum II
- LeetCode 40. Combination Sum II
- leetcode 40. Combination Sum II
- LeetCode 40. Combination Sum II
- LeetCode 40. Combination Sum II
- LeetCode *** 40. Combination Sum II
- 【LeetCode】40. Combination Sum II
- leetcode 40. Combination Sum II
- LeetCode - 40. Combination Sum II
- [LeetCode] 40. Combination Sum II
- select 2级联动和checkbox全选框联动
- Nanopi2 Fire 编写SPI驱动
- EF映射——linq to Entity ,不支持方法 get_item(int 32) 无法转换为存储表达式
- Linux多线程编程
- 如何在centos6.x 下建立swap文件
- [leetcode] 40. Combination Sum II
- Bootstrap学习小结
- 深度使用react-native的热更新能力,必须知道的一个shell命令
- [leetcode] 236. Lowest Common Ancestor of a Binary Tree
- 启动Activity时的方法调用(应用层)(MVC模式)
- ROM、PROM、EPROM、EEPROM、Flash ROM分别指什么?
- [leetcode] 131. Palindrome Partitioning
- JAVA学习笔记13:IO&类集
- 勾股定理一日一证连载85