leecode刷题 之 39 Combination Sum
2018-03-21 11:01
120 查看
题意:给定一个集合C,与一个数值Target。找出所有满足和为target的集合。
注意元素可以重复使用。
例如:C=[2,3,4,6,7] target = 7
结果为:[ [2,2,3],[3,4],[7]]
注意元素可以重复使用。
例如:C=[2,3,4,6,7] target = 7
结果为:[ [2,2,3],[3,4],[7]]
public class Combination{ public static List<List<Integer>> combinationSum1 = new ArrayList<>(); public static void getCombinationSum1(int[] arrays, int target) { //步骤一 将数据排序 Arrays.sort(arrays); //递归求和 combinationSum(arrays, 0, 0, new ArrayList<Integer>(),target); } /** * 求和,使得和为target(arrays中元素可以重复使用) * * @param arrays 总的元素 * @param start 开始计算的位置 * @param sum 当前已有元素的和 * @param currentAdderForSum 当前和为sum是的元素元素组成 * @param target 目标的值 */ private static void combinationSum(int[] arrays, int start, int sum, ArrayList<Integer> currentAdderForSum, int target) { if (sum == target) { //当前的集合已经满足和为target的要求,则将数据存储一下 combinationSum1.add(new ArrayList<>(currentAdderForSum)); //注意这里一定要重新New集合 return; } for (int i = start; i < arrays.length; i++) { //如果集合中有重复元素则为了避免重复,跳过本次循环 if (i > start && arrays[i] == arrays[i - 1]) { continue; } if ((sum + arrays[i]) > target) { //因为这是一个经过排序之后的升序数组,再接下来遍历循环没有意义,因此退出循环 break; } currentAdderForSum.add(arrays[i]); //从当前开始开始往后遍包括当前 combinationSum(arrays,i, sum + arrays[i], currentAdderForSum, target); currentAdderForSum.remove(currentAdderForSum.size() - 1); } } }
运行结果如下:
相关文章推荐
- LeetCode 39 - Combination Sum
- leetcode 39: Combination Sum
- LeetCode 39 Combination Sum
- 39-Combination Sum
- let 39 Combination Sum
- Leetcode 39 Combination Sum
- LeetCode 39 Combination Sum
- [leetcode-39]Combination Sum(java)
- LeetCode(39) Combination Sum
- LeetCode 39---Combination Sum
- LeetCode 39 Combination Sum(满足求和等于target的所有组合)
- leetcode 39 Combination Sum
- leetcode || 39、Combination Sum
- LeetCode(39) Combination Sum
- Leet Code 39 Combination Sum - 组合和 - Java
- LeetCode(39) Combination Sum
- [leetcode 39] Combination Sum
- LeetCode 39:Combination Sum
- [Leetcode]_39 Combination Sum
- 39 Combination Sum