Leetcode -- Combination Sum
2015-01-28 15:00
330 查看
问题链接:https://oj.leetcode.com/problems/combination-sum/
问题描述: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]
问题API: public List<List<Integer>> combinationSum(int[] candidates, int target)
问题分析:
这题和Combination没啥不同,就是用一个buf保留每一层的数字,然后往下递归。只是每一位的数字都可以取无限次,所以可以在本地无限循环,然后再向下一层进行循环。另外,由于解集里的数字要顺序表示。所以最开始的数组就要sort一次。Arrays.sort()
问题描述: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]
问题API: public List<List<Integer>> combinationSum(int[] candidates, int target)
问题分析:
这题和Combination没啥不同,就是用一个buf保留每一层的数字,然后往下递归。只是每一位的数字都可以取无限次,所以可以在本地无限循环,然后再向下一层进行循环。另外,由于解集里的数字要顺序表示。所以最开始的数组就要sort一次。Arrays.sort()
public List<List<Integer>> combinationSum(int[] candidates, int target) { LinkedList<List<Integer>> res = new LinkedList<List<Integer>>(); Arrays.sort(candidates); int size = target / candidates[0]; if(size == 0) return res; int[] tmpres = new int[size + 1]; combination(candidates, tmpres, target, 0, 0, res); return res; } public void combination(int[] candidates, int[] tmpres, int target, int curpos, int curlevel, List<List<Integer>> res){ if(target == 0){ LinkedList<Integer> curres = new LinkedList<Integer>(); for(int i = 0; i < curpos; i++){ curres.add(tmpres[i]); } res.add(curres); }else if(target < 0 || curlevel == candidates.length){ return; }else{ for(int i = 0; target - candidates[curlevel] * i >= 0; i++){ if(i != 0){ tmpres[curpos + i - 1] = candidates[curlevel]; } combination(candidates, tmpres, target - i * candidates[curlevel], curpos + i, curlevel + 1, res); } } }
相关文章推荐
- [Leetcode] Combination Sum
- leetcode-39-Combination Sum
- 深度优先搜索和回溯(实例LeetCode 39 Combination Sum)
- 【Leetcode】【python】Combination Sum
- leetcode--Combination Sum
- LeetCode --- Combination Sum
- Leetcode: Combination Sum
- (leetcode) Combination Sum
- LeetCode 10.7 Combination Sum
- leetcode39 Combination Sum
- LeetCode第39题之Combination Sum(两种方法)
- LEETCODE: Combination Sum
- 【LeetCode】C# 39、Combination Sum
- leetcode--Combination Sum
- [leetcode刷题系列]Combination Sum
- LeetCode: Combination Sum
- 【leetcode】Combination Sum
- Combination Sum - LeetCode
- LeetCode-Combination Sum
- [leetcode] Combination Sum