[Leetcode] Combination Sum
来源:互联网 发布:scp 端口号 编辑:程序博客网 时间:2024/06/18 07:01
描述
Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.
For example, given candidate set [2, 3, 6, 7] and target 7,
A solution set is:
[ [7], [2, 2, 3]]
分析
对于这种求所有组合的题目优先想到用递归的方法解决。方法是:将数组排序,遍历数组,对于数组中每一个元素,考虑“没有被选中”以及“第一个被选中”这两种情况,而每种情况都是原来问题的递归问题。
代码1
class Solution {public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(), candidates.end()); vector<vector<int>> res; vector<int> out; combine(target, candidates, 0, out, res); return res; } void combine(int target, vector<int>& candidates, int i, vector<int>& out, vector<vector<int>>& res) { if (target == 0) {res.push_back(out); return;} if (i >= candidates.size() || target < 0) return; combine(target, candidates, i + 1, out, res); out.push_back(candidates[i]); combine(target - candidates[i], candidates, i, out, res); out.pop_back(); }};
代码2
class Solution {public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(), candidates.end()); vector<vector<int>> res; vector<int> out; combine(target, candidates, 0, out, res); return res; } void combine(int target, vector<int>& candidates, int i, vector<int>& out, vector<vector<int>>& res) { if (target == 0) {res.push_back(out); return;} if (i >= candidates.size() || target < 0) return; for (int j = i; j < candidates.size(); j++) { out.push_back(candidates[j]); combine(target - candidates[j], candidates, j, out, res); out.pop_back(); } }};
相关题目
Combination Sum II
0 0
- [LeetCode] Combination Sum、Combination Sum II
- 【LeetCode】Combination Sum && Combination Sum II
- leetcode之Combination Sum && Combination Sum II
- leetcode Combination Sum &Combination Sum II
- leetcode-combination sum and combination sum II
- Leetcode:Combination Sum与Combination Sum II
- leetcode Combination Sum VS Combination Sum II
- [Leetcode]Combination Sum &&Combination Sum II
- LeetCode Combination Sum & Combination Sum II
- leetcode | Combination Sum & Combination Sum 2
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- LeetCode: Combination Sum
- LeetCode: Combination Sum II
- [LeetCode]Combination Sum
- [LeetCode]Combination Sum II
- LeetCode Combination Sum
- LeetCode Combination Sum II
- Spring Batch 之 Sample(固定长格式文件读写)(六)
- 后台返回状态码,js验证跳转登录
- mysql中主外键关系
- (获取应用的包名/应用名等信息)打开、安装和卸载应用
- JSON web token@07#Creating and Validating JWTs
- [Leetcode] Combination Sum
- Spring Batch 之 Sample(复合格式文件的读、多文件的写)(七)
- JSON web token@08#Implementation Requirements
- 小程序之switch...case...break
- rootkit实现劫持系统调用ps、ls
- BLE 之centralManagerDelegate类介绍
- [!] The 'Pods-PUClient' target has frameworks with conflicting names: UMMobClick.
- Hibernate二级缓存
- Spring Batch 之 Sample(游标方式读写DB数据表)(八)