首页 > 代码库 > [LeetCode]40 Combination Sum II
[LeetCode]40 Combination Sum II
https://oj.leetcode.com/problems/combination-sum-ii/
http://blog.csdn.net/linhuanmars/article/details/20829099
public class Solution { public List<List<Integer>> combinationSum2(int[] num, int target) { if (num == null || num.length == 0) return Collections.emptyList(); // Sort Arrays.sort(num); Set<List<Integer>> result = new HashSet<>(); sum(num, target, 0, new ArrayList<Integer>(), result); return new ArrayList<List<Integer>>(result); } private void sum(int[] num, int t, int start, List<Integer> curnums, Set<List<Integer>> result) { if (t < 0) return; if (t == 0) { List<Integer> r = new ArrayList<>(curnums); Collections.sort(r); result.add(r); return; } for (int i = start ; i < num.length ; i ++) { curnums.add(num[i]); // 由于每个数字只能被用到以此,所以 nextstart = i + 1 // 这是和 combination sum 问题的区别 // 而且,这导致了结果集有可能有重复 // 比如 输入数组有两个2 // 一个结果了使用 第一个2 // 另一个结果使用了 第二个2 // 需要使用set去除重复 int nextstart = i + 1; sum(num, t - num[i], i + 1, curnums, result); curnums.remove(curnums.size() - 1); } } }
[LeetCode]40 Combination Sum II
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。