40. Combination Sum II
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 40 Combination Sum II(数组中求和等于target的所有组合)