LeetCode--Combination Sum
2017-12-03 11:16
225 查看
题目:
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
A solution set is:
解读:给予一组不重复的正整数数组C,和一个正整数T。从C数组中找出所有数字组合使得和为T,所用的元素可以重复。最终结果中的数组不能重复。
思维:采用递归的方法。设一个整数sum存储当前预备结果的数组的元素和,如果sum>target则返回并把预备结果数组最后一个元素弹出;如果sum==target则把预备结果数组放入最终的结果中,返回并弹出最后元素。用low来存储搜索的数组开始的下标。
代码如图:
class Solution {
public:
void combinesum(int target, int& sum, vector<int>& candidates,vector<int>& solution,
int low, vector<vector<int>>& result){
if(sum > target) return;
if(sum == target) result.push_back(solution);
for(int i = low; i < candidates.size(); i++){
sum += candidates[i];
solution.push_back(candidates[i]);
combinesum(target, sum, candidates, solution, i , result);
sum -= candidates[i];
solution.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
int sum = 0;
int low = 0;
vector<vector<int>> result;
vector<int> solution;
combinesum(target,sum, candidates,solution, low, result);
return result;
}
};
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] ]
解读:给予一组不重复的正整数数组C,和一个正整数T。从C数组中找出所有数字组合使得和为T,所用的元素可以重复。最终结果中的数组不能重复。
思维:采用递归的方法。设一个整数sum存储当前预备结果的数组的元素和,如果sum>target则返回并把预备结果数组最后一个元素弹出;如果sum==target则把预备结果数组放入最终的结果中,返回并弹出最后元素。用low来存储搜索的数组开始的下标。
代码如图:
class Solution {
public:
void combinesum(int target, int& sum, vector<int>& candidates,vector<int>& solution,
int low, vector<vector<int>>& result){
if(sum > target) return;
if(sum == target) result.push_back(solution);
for(int i = low; i < candidates.size(); i++){
sum += candidates[i];
solution.push_back(candidates[i]);
combinesum(target, sum, candidates, solution, i , result);
sum -= candidates[i];
solution.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
int sum = 0;
int low = 0;
vector<vector<int>> result;
vector<int> solution;
combinesum(target,sum, candidates,solution, low, result);
return result;
}
};
相关文章推荐
- [LeetCode] Combination Sum
- leetcode--Combination Sum
- LeetCode--Combination Sum
- leetcode:Combination Sum
- LeetCode:Combination Sum
- Combination Sum | && || Leetcode
- [LeetCode] Combination Sum, Solution
- [LeetCode]Combination Sum(!!!!!)
- LeetCode 39 Combination Sum(满足求和等于target的所有组合)
- [Leetcode]_39 Combination Sum
- 【LeetCode】Combination Sum
- LeetCode --- Combination Sum
- Combination Sum -- LeetCode
- LeetCode--Combination Sum
- 【回溯】【leetcode题解】【M】【57】Combination Sum
- Leetcode:Combination Sum
- [Leetcode] Combination Sum
- [LeetCode]题解(python):039-Combination Sum
- LeetCode 39 Combination Sum
- LeetCode - Combination Sum