[经典] 组合指定和问题

组合总和问题解析
本文详细探讨了三道关于组合总和的经典问题:Combination Sum I、Combination Sum II 和 Combination Sum III。针对每一道题目,都给出了具体的解题思路和算法实现方法,包括排序、深度优先搜索等技巧。

【Combination Sum I】

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
  • The solution set must not contain duplicate combinations.

For example, given candidate set 2,3,6,7 and target 7
A solution set is: 
[7] 
[2, 2, 3]

 解法:先对数组进行排序,再用DFS。其中设定一个开始位,候选集中下一个数都只能取前一个数下标后面的数。

 

【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.

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] 

解法:由于要求每个数字不能重复,所以其它都一样,多了一个条件,候选集中下一个数不仅需要候选集中上一个数下标之后,并且两个相邻数的数值也不能相同。

 

【Combination Sum III】

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:

Input: k = 3, n = 9

Output:

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

解法:与第一题不同的是,指定了数目,数值范围;利用这一点,可以更早地剪枝。

假设需求数的个数为need,当前目标数是target,当前数值是i;那么不必到target < 0才回溯,只需要target < i*need+need*(need-1)/2或者target > need*9就可以回溯了,因为此时已经不可能满足要求。

转载于:https://www.cnblogs.com/littletail/p/5353427.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值