Java for LeetCode 216 Combination Sum III

组合总和III问题解析
本文探讨了如何找出所有可能的组合,这些组合由k个数构成并加总为n,仅使用1到9的数字,并确保每种组合都是唯一且按升序排列的集合。以Java为例,提供了一种解决方案。

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Ensure that numbers within the set are sorted in ascending order.

Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]


Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]

解题思路:

偷懒一点,直接在Java for LeetCode 040 Combination Sum II上面再加一个depth即可,JAVA实现如下:

public List<List<Integer>> combinationSum3(int k, int n) {
		int[] candidates = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		ArrayList<List<Integer>> list = new ArrayList<List<Integer>>();
		if (k > 9 || n > 55 || n / k == 0)
			return list;
		dfs(list, candidates, 0, n, 0, k, 0);
		return list;
	}

	static List<Integer> list2 = new ArrayList<Integer>();

	static void dfs(ArrayList<List<Integer>> list, int[] array, int result,
			int target, int depth, int k, int depth2) {
		if (result == target && depth2 == k) {
			list.add(new ArrayList<Integer>(list2));
			return;
		} else if (depth2 >= k || result > target || depth >= array.length)
			return;
		for (int i = 0; i <= 1; i++) {
			for (int j = 0; j < i; j++) {
				list2.add(array[depth]);
				depth2++;
			}
			dfs(list, array, result + array[depth] * i, target, depth + 1, k,
					depth2);
			for (int j = 0; j < i; j++) {
				list2.remove(list2.size() - 1);
				depth2--;
			}
		}
	}

 

转载于:https://www.cnblogs.com/tonyluis/p/4564608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值