【LeetCode】Combination Sum
来源:互联网 发布:程序员的怒喊 编辑:程序博客网 时间:2024/05/29 11:58
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]
以下代码超时:
public class Solution { ArrayList<ArrayList<Integer>> res; ArrayList<Integer> newcandidates; ArrayList<Integer> sum; public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. res = new ArrayList<ArrayList<Integer>>();if(candidates.length == 0)return res;newcandidates = new ArrayList<Integer>();Arrays.sort(candidates);for(int i = 0; i < candidates.length; i++){int num = target / candidates[i];for(int k = 0; k < num; k++)newcandidates.add(candidates[i]);}//System.out.println(newcandidates);if(newcandidates.size() == 0) return res;sum = new ArrayList<Integer>();dfs(target, 0, 0);sum = null;newcandidates = null;return res; } public void dfs(int target, int step, int tmpsum){ if(step == newcandidates.size()) { if(tmpsum == target) { if(!res.contains(sum)) res.add(new ArrayList<Integer>(sum)); } return ; }if(tmpsum > target)return;sum.add(newcandidates.get(step));dfs(target, step + 1, tmpsum + newcandidates.get(step));sum.remove(sum.size() - 1);dfs(target, step + 1, tmpsum);return;}}
以下代码不超时:
public class Solution { public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();if(candidates.length == 0)return res;Arrays.sort(candidates);ArrayList<Integer> sum = new ArrayList<Integer>();dfs(res, candidates, target, sum, 0, 0);return res; } public void dfs(ArrayList<ArrayList<Integer>> res, int[] array, int target, ArrayList<Integer> sum, int step, int tmpsum){if(tmpsum == target){if(!res.contains(sum))res.add(new ArrayList<Integer>(sum));return;}if(tmpsum > target)return;for(int i = step; i < array.length; i++){sum.add(array[i]);dfs(res, array, target, sum, i, tmpsum + array[i]);sum.remove(sum.size() - 1);}return;}}
如果循环里面的 dfs 函数 里,循环步长 i 变成 i +1 ,那么就变形为每个数只能用一次。
- [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
- mysql 小结
- gslX680驱动中出现“i2c i2c-0: sendbytes: NAK bailout.”错误
- effective C++读书笔记(六)
- applicationContext.xml和SpringMVC的区别
- const修饰指针
- 【LeetCode】Combination Sum
- 判断JSON null
- ASSERT(0) 详解
- effective C++读书笔记(七)
- SAP反记帐和红字冲销
- hdoj-2113,水
- C# WinForm 如何实现窗体的关闭时温馨提示
- 洗牌算法
- 图片二进制互相转换(C#)