非递归实现不重复序列的全排列(一)
2004-07-21 14:29
281 查看
笔者曾写过利用递归实现不重复序列全排列的例子http://blog.csdn.net/northwolves/archive/2004/04/07/19590.aspx
现在给出另一个利用进制实现的代码:
Sub pailie1(ParamArray x())
Dim starttime As Single, endtime As Single
Dim n As Integer, i As Long, Num As Integer, j As Integer
Dim temp1() As String, temp2 As Long, all As New Collection
n = UBound(x) + 1 '元素个数
starttime = Timer '开始计时
ReDim temp1(1 To n)
For i = 0 To n ^ n - 1
temp2 = i
Set all = Nothing
On Error Resume Next
For j = n To 1 Step -1
temp1(j) = x(temp2 Mod n) '转换为n进制
all.Add temp1(j), temp1(j) '防止某一元素重复列出
temp2 = temp2 / n
Next
If all.Count = n Then
Debug.Print Join(temp1, " ") '输出
Num = Num + 1
End If
? DoEvents
Next
endtime = Timer
Debug.Print "共 " & Num & " 种排列!用时 " & endtime - starttime & " 秒!"
End Sub
Private Sub Command1_Click()
pailie1 "a", "b", "c", "d", "e", "f", "g"
End Sub
现在给出另一个利用进制实现的代码:
Sub pailie1(ParamArray x())
Dim starttime As Single, endtime As Single
Dim n As Integer, i As Long, Num As Integer, j As Integer
Dim temp1() As String, temp2 As Long, all As New Collection
n = UBound(x) + 1 '元素个数
starttime = Timer '开始计时
ReDim temp1(1 To n)
For i = 0 To n ^ n - 1
temp2 = i
Set all = Nothing
On Error Resume Next
For j = n To 1 Step -1
temp1(j) = x(temp2 Mod n) '转换为n进制
all.Add temp1(j), temp1(j) '防止某一元素重复列出
temp2 = temp2 / n
Next
If all.Count = n Then
Debug.Print Join(temp1, " ") '输出
Num = Num + 1
End If
? DoEvents
Next
endtime = Timer
Debug.Print "共 " & Num & " 种排列!用时 " & endtime - starttime & " 秒!"
End Sub
Private Sub Command1_Click()
pailie1 "a", "b", "c", "d", "e", "f", "g"
End Sub
相关文章推荐
- 非递归实现不重复序列的全排列(一)
- 非递归实现不重复序列的全排列(二)
- 非递归实现不重复序列的全排列(二)
- 非递归实现不重复序列的全排列(三)
- 非递归实现不重复序列的全排列(三)
- 非递归实现不重复序列的全排列(三)
- 全排列--字典序列、递归方法c语言实现
- 递归实现全排列(可包含重复元素)
- 全排列实现(递归,去重复,字典排序,stl实现)
- 简单全排列C递归实现 没考虑重复情况
- 面试题------全排列的非递归和递归实现(含重复元素)
- 简单全排列C递归实现 没考虑重复情况
- 递归实现全排列(java版)
- 新解全排列的递归实现
- N个字符全排列的非递归实现
- 递归实现n个元素全排列(2)
- 全排列的递归实现以及利用STL实现全排列
- 递归实现全排列
- 全排列——递归实现
- 入出栈序列的种数—递归及卡特兰数(Catalan)实现