附: 我的递归解法: Option Explicit Sub getall(ByVal mystr As String, ByRef steps() As String, Optional ByRef methodn As Long) '将mystr的所有可能编码方法保存在数组steps()中,编码方法数目保存在methodn中 Dim i As Long, a() As String, methoda As Long If Len(mystr) = 1 Then '1位就一种可能 methodn = 1 ReDim steps(1 To methodn) steps(1) = Chr(Val(Left(mystr, 1)) + 64) End If If Len(mystr) = 2 Then methodn = 2 ReDim steps(1 To methodn) steps(1) = Chr(Val(Left(mystr, 1)) + 64) & Chr(Val(Right(mystr, 1)) + 64) If Val(mystr) < 26 Then steps(2) = Chr(Val(mystr) + 64) Else ReDim Preserve steps(1 To 1) methodn = 1 End If End If If Len(mystr) > 2 Then getall Left(mystr, Len(mystr) - 1), steps, methodn '递归调用 For i = 1 To methodn steps(i) = steps(i) & Chr(Val(Right(mystr, 1)) + 64) Next If Val(Right(mystr, 2)) < 26 Then getall Left(mystr, Len(mystr) - 2), a, methoda '递归调用 ReDim Preserve steps(1 To methodn + methoda) For i = 1 To methoda steps(i + methodn) = a(i) & Chr(Val(Right(mystr, 2)) + 64) Next methodn = methodn + methoda End If End If End Sub Private Sub CommandButton1_Click() Dim temp() As String, n As Long getall [a1], temp, n Application.ScreenUpdating = False [a2].Resize(n, 1) = WorksheetFunction.Transpose(temp) Application.ScreenUpdating = True End Sub
|