[LeetCode39]Combination Sum
来源:互联网 发布:淘宝手机端详情页宽度 编辑:程序博客网 时间:2024/06/10 03:06
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]
In order to get all possible solution, idea is to use DFS to get possible combinations.
if sum==target, add to solution,
if sum>target return
else dfs(...)
Java
public class Solution { List<List<Integer>> result;List<Integer> solu;public List<List<Integer>> combinationSum(int[] candidates, int target) { result = new ArrayList<>(); solu = new ArrayList<>(); Arrays.sort(candidates); getCombination(candidates, target, 0, 0); return result; }public void getCombination(int[] candidates, int target, int sum, int level){if(sum>target) return;if(sum==target){result.add(new ArrayList<>(solu));return;}for(int i=level;i<candidates.length;i++){sum+=candidates[i];solu.add(candidates[i]);getCombination(candidates, target, sum, i);solu.remove(solu.size()-1);sum-=candidates[i];}}}
updated, no golbal variable
public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); Arrays.sort(candidates); findSum(candidates, target, 0,0,temp, res); return res; } public void findSum(int[] candidates, int target, int sum, int level,List<Integer> temp, List<List<Integer>> res){ if(sum == target) { res.add(new ArrayList<>(temp)); return; } else if(sum > target) { return; } else { for(int i=level;i<candidates.length;i++) { temp.add(candidates[i]); findSum(candidates, target, sum+candidates[i], i, temp, res); temp.remove(temp.size()-1); } } }
c++
class Solution {public: void getCombineSum( int &sum, int level, int target, vector<int> &solution, vector<int> &candidates, vector<vector<int>> &result ){ if(sum > target) return; if(sum == target){ result.push_back(solution); return; } for(int i = level; i<candidates.size(); i++){ sum += candidates[i]; solution.push_back(candidates[i]); getCombineSum(sum,i,target,solution,candidates,result); solution.pop_back(); sum -= candidates[i]; }}vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<int> solution; vector<vector<int>> result; int sum = 0; sort(candidates.begin(),candidates.end()); getCombineSum(sum,0,target,solution,candidates,result); return result;}};
3 0
- [LeetCode39]Combination Sum
- LeetCode39:Combination Sum
- Leetcode39 Combination Sum
- leetcode39 Combination Sum
- leetcode39 Combination Sum
- LeetCode39. Combination Sum
- Leetcode39:Combination Sum
- leetcode39. Combination Sum
- leetcode39. Combination Sum
- LeetCode39 Combination Sum
- leetcode39. Combination Sum
- Leetcode39. Combination Sum
- (LeetCode39)Combination Sum
- LeetCode39——Combination Sum
- [LeetCode39]Combination Sum 和[LeetCode40]Combination Sum II
- leetcode39和40 java实现 Combination Sum和Combination Sum II
- leetcode39&40_Combination Sum& CombinationSumII
- LeetCode39
- Overloading the << Operator for Your Own Classes
- 状态压缩动态规划 -- 旅行商问题
- 李克强:有信心实现今年经济增长7.5%目标
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 友元函数(friend)
- [LeetCode39]Combination Sum
- 使用 Jackson 库生成解析 json
- install pydev in eclipse
- 2014E3游戏展回顾 大作频发精彩不断
- [LeetCode40]Combinations Sum II
- C# 中的回车换行符
- Xsolla带你走进印度移动游戏市场
- 问题解决 apache: you dont have permission to access
- 问题解决: You don't have permission to access /phpmyadmin/main.php on this server.