'对给出的字符,进行有顺序或无顺序的排列组合,找出全部的组合结果。
Dim j As Long
Dim buff() As String
Dim l As Integer '排列长度
Dim ss As Variant
Private Sub Make_PString(ByRef s As Variant, n As Long, ByVal ls As String)
Dim t As Variant, lls As String
For i = 0 To n
t = s: lls = ls & t(i)
t(i) = t(n)
If n = 0 Then
Range("A" & j) = lls
buff(j) = lls
j = j + 1
Else
Make_PString t, n - 1, lls
End If
Next i
End Sub
Public Sub P排列()
'有顺序排列
Dim s As Variant, i As Long, t As Long
Cells.ClearContents
j = 1: t = 1
s = Array("0", "1", "2")
'通过s的长度计算生成字串的个数,即 n!, 分配缓冲区
For i = 1 To UBound(s)
t = t * (i + 1)
Next i
ReDim buff(1 To t)
Make_PString s, UBound(s), ""
End Sub
Private Sub Make_CString(ByVal n As Long, ByVal ls As String)
Dim t As String
For i = n To 0 Step -1
t = ls & ss(i)
If Len(t) = l Then
Range("B" & j) = t
' buff(j) = t
j = j + 1
Else
Make_CString i - 1, t
End If
Next i
End Sub
Public Sub C排列()
'无顺序排列
Dim s As Variant, i As Long, t As Long
j = 1: l = 4
ss = Array("9", "8", "7", "6", "5", "4", "3", "2", "1", "0")
' ReDim buff(1 To 100)
Cells.ClearContents
Make_CString UBound(ss), ""
End Sub