前言
在回溯算法中的组合问题总是感觉每道题目的条件不同,但其实这里面是有规律的,下面我就来总结一下。
一、回溯算法中的组合问题是什么?
其实就是给你一个数组,然后你要从里面选取几个数字,使得他们的和等于目标值。
二、经典组合问题
1.组合总和(力扣39)
AC代码如下:
// 给的集合无重复,集合元素可重复使用
func combinationSum(candidates []int, target int) [][]int {
res := make([][]int, 0)
path := make([]int, 0)
var dfs func(int, int)
// sum 为每一层的总和, start 子集开始范围(关键点)
dfs = func(sum int, start int) {
if sum == target {
// 不要直接 append,切片的地址传递,如果 append,在结果集中的结果会被改变.
res = append(res, append([]int(nil), path...))
return
}
if sum >