Combination Sum算法详解
来源:互联网 发布:淘宝代刷灰烬套装 编辑:程序博客网 时间:2024/05/16 09:00
Combination Sum I:
算法题目:Given a set of candidate numbers (C) 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.
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 2,3,6,7 and target 7,
A solution set is:
[7]
[2, 2, 3]
题意:给定一个正数集合和一个目标数,求出所有的子集合,使子集的和为target,要求子集合递增排列,且不包含重复的子集合,子集合中的数字可以重复
思路:先排序,递归求所有数字的集合,并判断数是否等于target
void CombinationSumCore(const vector<int>& candidates,vector<vector<int>>& res,vector<int>& com,int target,int pos) { if(target==0) { res.push_back(com); return; } for(int i=pos;i<candidates.size();i++) { if(candidates[i]>target)break; com.push_back(candidates[i]); CombinationSumCore(candidates,res,com,target-candidates[i],i); com.pop_back(); } } vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); vector<vector<int>> res; vector<int> com; CombinationSumCore(candidates,res,com,target,0); return res; }
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]
题意:给定一个正数集合和一个目标数,求出所有的子集合,使子集的和为target,要求子集合递增排列,且不包含重复的子集合,原集合中的数字在每个子集中最多出现1次
思路:先排序,递归求所有数字的子集合,并判断数是否等于target
void CombinationSumCore(const vector<int>& candidates,vector<vector<int>>& res,vector<int>& com,int target,int pos) { if(target==0) { res.push_back(com); return; } for(int i=pos;i<candidates.size();i++) { if(candidates[i]>target)break; if(i==pos||candidates[i]!=candidates[i-1]) { com.push_back(candidates[i]); CombinationSumCore(candidates,res,com,target-candidates[i],i+1); com.pop_back(); } } } vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); vector<vector<int>> res; vector<int> com; CombinationSumCore(candidates,res,com,target,0); return res; }
Combination Sum III:
题目:Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
题意:给定1~9这9个数字,以及k,n,求出所有的子集合,使子集的和为n,要求子集合的大小为k,递增排列,且不包含重复的子集合,原集合中的1~9数字每个数字最多出现1次
思路:递归求所有数字的子集合,并判断数是否等于target
void CombinationSumCore(vector<vector<int>>& res,vector<int>& com,int target,int pos,int k) { if(target==0) { if(com.size()==k)res.push_back(com); return; } for(int i=pos;i<=9;i++) { if(i>target)break; com.push_back(i); CombinationSumCore(res,com,target-i,i+1,k); com.pop_back(); } } vector<vector<int>> combinationSum3(int k, int n) { vector<vector<int>> res; vector<int> com; CombinationSumCore(res,com,n,1,k); return res; }
- Combination Sum算法详解
- 算法。递归。之一: combination sum, leetcode
- 每日算法之三十一:Combination Sum
- LeetCode—**Combination Sum 利用DFS算法
- 40. Combination Sum II 回溯算法
- leetcode 40. Combination Sum II-回溯算法
- leetcode 216 Combination Sum III java 算法
- 算法系列——Combination Sum
- 算法系列——Combination Sum II
- Leetcode算法学习日志-39 Combination Sum
- (算法分析Week13)Combination Sum IV[Medium]
- 【LeetCode算法练习(C++)】Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- Combination Sum
- ytu2006——拍皮球(自由落体)
- C#中的set和get方法
- PHP 获取图片的主色调
- WiFi Tethering & Usb Tethering
- ios开发中的问题1
- Combination Sum算法详解
- java修炼之道笔记(一)
- C语言中存储类型和Static关键字
- Git提交时发生unable to get local issuer certificate while accessing错误
- unity 读取xml 信息
- PHP 获取日期所在自然周和自然月的方法
- [转载]Python正则表达式操作指南
- java架构师之路:JAVA程序员必看的15本书的电子版下载地址
- 谷妹