216.组合总和 III

47 阅读1分钟

题目:
找出所有相加之和为 n **的 k ****个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次 

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回
算法:

func combinationSum3(k int, n int) [][]int {
	ans := make([][]int, 0)
	result := make([]int, 0)
	var backtracking func(index, sum, num int)
	backtracking = func(index, sum, num int) {
		if index > 10 || index > n || sum < 0 || num < 0 {
			return
		}
		if sum == 0 && num == 0 {
			ans = append(ans, append([]int{}, result...))
			return
		}
		backtracking(index + 1, sum, num)

		if sum - index >= 0 {
			result = append(result, index)
			backtracking(index + 1, sum - index, num - 1)
			result = result[:len(result) - 1]
		}

	}
	backtracking(1, n, k)
	return ans
}