回溯算法_组合总和III
'找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 '说明: '所有数字都是正整数? '解集不能包含重复的组合? '示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] '示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]] Public path As New Collection Public res_ar() As Variant Public cnt As Long Sub 回溯算法_组合总和III() Application.SendKeys "^g ^a {del}", True Stop cnt = 0 Call build(3, 9, 1, 0) For x = 1 To UBound(res_ar) Debug.Print (res_ar(x)) Next End Sub Private Sub build(k, n, startIndex, sum) If sum > n Then Exit Sub If path.count > k Then Exit Sub If sum = n And path.count = k Then cnt = cnt + 1 ReDim Preserve res_ar(1 To cnt) For x = 1 To path.count tem = tem & path(x) Next res_ar(cnt) = tem End If For i = startIndex To 9 path.Add (i) sum = sum + i Call build(k, n, i + 1, sum) sum = sum - i path.Remove (path.count) Next End Sub