• [经典] 组合指定和问题


    【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就可以回溯了,因为此时已经不可能满足要求。

  • 相关阅读:
    回调函数
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    顶帽变化(转载)
    协程 + asyncio
    docker
    vue+uwsgi+nginx部署前后端分离项目
    html
    关于html的基础标签
    关于python中的GIL
    hashlib模块
  • 原文地址:https://www.cnblogs.com/littletail/p/5353427.html
Copyright © 2020-2023  润新知