回溯算法_组合总和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

 

posted @ 2022-12-08 15:11  依云科技  阅读(24)  评论(0)    收藏  举报