'找出所有相加之和为 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