📜  组合总和(1)

📅  最后修改于: 2023-12-03 15:27:33.416000             🧑  作者: Mango

组合总和

介绍

组合总和是一道经典的数学题,旨在从给定的候选数中找出所有的唯一组合,使它们的和等于给定的目标数。

例如,对于候选数 [2, 3, 6, 7] 和目标数 7,可以找到如下四个唯一组合:

  • [7]
  • [2, 2, 3]
  • [2, 5]
  • [3, 4]
解法

组合总和可以通过回溯算法来解决。回溯算法的基本思想是枚举所有可能的解,并逐步排除不符合条件的解,最终找到符合条件的解。

在组合总和问题的回溯算法中,我们首先从候选数中挑选一个数,然后尝试在剩余候选数中寻找凑出目标数的解。如果找到了解,就将该解存储下来;否则,就回溯到之前的状态和选择新的候选数。

以下是组合总和的回溯算法实现:

def combinationSum(candidates, target):
    result = []

    def backtrack(start, target, combination):
        if target == 0:
            result.append(combination[:])
            return
        if target < 0:
            return
        for i in range(start, len(candidates)):
            combination.append(candidates[i])
            backtrack(i, target - candidates[i], combination)
            combination.pop()

    backtrack(0, target, [])
    return result
参考资料