组合总和 II

【题目】给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明:

  • 所有数字(包括目标数)都是正整数。
  • 解集不能包含重复的组合。
public static List<List<Integer>> combinationSum(int[] candidates, int target) {
		Arrays.sort(candidates);
		List<List<Integer>> res = new ArrayList<List<Integer>>();
		List<Integer> list = new ArrayList<>();
		huishuo(candidates, 0, target, list, res);
		return res;
	}

	private static void huishuo(int[] candidates, int start, int target, List<Integer> list, List<List<Integer>> res) {
		if (target < 0) {
			return;
		}
		if (target == 0) {
			res.add(new ArrayList<>(list));
			return;
		}
		for (int i = start; i < candidates.length; i++) {
			if (i > start && candidates[i] == candidates[i - 1]) {
				continue;
			}
			list.add(candidates[i]);
			huishuo(candidates, i + 1, target - candidates[i], list, res);
			list.remove(list.size() - 1);

		}
	}

版权声明:本文为gkq_tt原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。