首页 > 代码库 > 40. Combination Sum II
40. Combination Sum II
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. Each number in C may only be used once in the combination. Note: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations. For example, given candidate set [10, 1, 2, 7, 6, 1, 5] and target 8, A solution set is: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]
比39. Combination Sum多了个从下一位递归而已
public List<List<Integer>> combinationSum2(int[] num, int target) { // write your code here public List<List<Integer>> combinationSum2(int[] candidates, int target) { List<List<Integer>> res = new ArrayList<>(); //List<Integer> list = new ArrayList<Integer>(); if (candidates.length == 0) { return res; } Arrays.sort(candidates); helper(res, new ArrayList<Integer>(), candidates, target, 0); return res; } private void helper(List<List<Integer>> res, List<Integer> list, int[] num, int target, int pos) { if (target == 0) { res.add(new ArrayList<Integer>(list)); return; } for (int i = pos; i < num.length; i++) { if (num[i] > target || i != pos && num[i] == num[i - 1]) { continue; } list.add(num[i]); helper(res, list, num, target - num[i], i + 1); list.remove(list.size() - 1); } }
利用排序的性质 提高效率
if (num[i] > target || i != pos && num[i] == num[i - 1]) { continue; }
40. Combination Sum II
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。