VB.NET 排列组合算法实现
2008-09-13 13:13
621 查看
假设给定数组 A[ ] , A中元素不重复,要求出所有元素的组合:
A[a, b, c]
→ a
→ b
→ c
→ a b
→ a c
→ b c
→ a b c
' 求给定数组,n个元素进行组合的枚举结果。
' n=1时,组合个数为1,如:a;
' n=2时,组合个数为2,如:ab;
' n=3时,组合个数为3,如:abc;
Function Comb(ByVal arr As List(Of String), ByVal n As Integer) As List(Of String)
Dim newArray As List(Of String) = New List(Of String)
If n = 1 Then
newArray = arr
ElseIf n = 2 Then
For i As Integer = 0 To arr.Count - 1
For j As Integer = i + 1 To arr.Count - 1
newArray.Add(arr(i) & "&" & arr(j))
Next
Next
Else
Dim str As String = ""
For i As Integer = 0 To arr.Count - 1
str = arr(i)
Dim tempArr As List(Of String) = New List(Of String)
For j As Integer = i + 1 To arr.Count - 1
tempArr.Add(arr(j))
Next
If tempArr.Count < n - 1 Then
Exit For
End If
Dim arr1 As List(Of String) = Comb(tempArr, n - 1)
For Each strTemp As String In arr1
newArray.Add(str & "&" & strTemp)
Next
Next
End If
Return newArray
End Function使用:
Sub Main()
'使用例:
'构造一个数组:
Dim arrList As List(Of String) = New List(Of String) From {"a", "b", "c"}
For i As Integer = 1 To arrList.Count
Dim lstResult As List(Of String) = Comb(arrList, i)
For Each str As String In lstResult
Console.WriteLine(str)
Next
Next
Console.Read()
End Sub
数组:"a", "b", "c", "d"输出结果:
a
b
c
d
a&b
a&c
a&d
b&c
b&d
c&d
a&b&c
a&b&d
a&c&d
b&c&d
a&b&c&d
C# 版本的:
public static IEnumerable<string> Comb(string chars)
{
var data = chars.ToCharArray();
var result = new[] {""};
for(var i=0; i<chars.Length; i++)
{
result = (from a in data
from b in result
where !b.Contains(a)
select a + "" + b).ToArray();
}
return result;
}输入: abcd
输出:
abc
acb
bac
bca
cab
cba
A[a, b, c]
→ a
→ b
→ c
→ a b
→ a c
→ b c
→ a b c
' 求给定数组,n个元素进行组合的枚举结果。
' n=1时,组合个数为1,如:a;
' n=2时,组合个数为2,如:ab;
' n=3时,组合个数为3,如:abc;
Function Comb(ByVal arr As List(Of String), ByVal n As Integer) As List(Of String)
Dim newArray As List(Of String) = New List(Of String)
If n = 1 Then
newArray = arr
ElseIf n = 2 Then
For i As Integer = 0 To arr.Count - 1
For j As Integer = i + 1 To arr.Count - 1
newArray.Add(arr(i) & "&" & arr(j))
Next
Next
Else
Dim str As String = ""
For i As Integer = 0 To arr.Count - 1
str = arr(i)
Dim tempArr As List(Of String) = New List(Of String)
For j As Integer = i + 1 To arr.Count - 1
tempArr.Add(arr(j))
Next
If tempArr.Count < n - 1 Then
Exit For
End If
Dim arr1 As List(Of String) = Comb(tempArr, n - 1)
For Each strTemp As String In arr1
newArray.Add(str & "&" & strTemp)
Next
Next
End If
Return newArray
End Function使用:
Sub Main()
'使用例:
'构造一个数组:
Dim arrList As List(Of String) = New List(Of String) From {"a", "b", "c"}
For i As Integer = 1 To arrList.Count
Dim lstResult As List(Of String) = Comb(arrList, i)
For Each str As String In lstResult
Console.WriteLine(str)
Next
Next
Console.Read()
End Sub
数组:"a", "b", "c", "d"输出结果:
a
b
c
d
a&b
a&c
a&d
b&c
b&d
c&d
a&b&c
a&b&d
a&c&d
b&c&d
a&b&c&d
C# 版本的:
public static IEnumerable<string> Comb(string chars)
{
var data = chars.ToCharArray();
var result = new[] {""};
for(var i=0; i<chars.Length; i++)
{
result = (from a in data
from b in result
where !b.Contains(a)
select a + "" + b).ToArray();
}
return result;
}输入: abcd
输出:
abc
acb
bac
bca
cab
cba
相关文章推荐
- 高效率的排列组合算法(java实现)
- VB.NET实现身份证15位升18位的算法
- 关于数学中排列组合之组合算法实现
- java 高效率的排列组合算法(java实现)
- 【转】JAVA实现排列组合算法
- VB.NET & (三层+泛型)实现组合查询
- 高效率的排列组合算法--《编程珠矶》--python实现
- 排列和组合算法 C语言经典实现
- 排列组合算法的递归实现
- [原创]:排列(组合)算法的实现:
- js实现全排列组合算法
- java排列组合算法代码实现
- c语言实现排列组合算法问题
- 排列与组合的算法实现
- java 高效率的排列组合算法(java实现)
- 经典递归算法之排列,组合,集合和换零钱, Python yield实现.
- 针对较大基数的排列组合算法Java实现类(n选m)
- Java实现排列组合算法
- vb.net机房收费系统—组合查询的实现
- 排列组合之排列问题的算法实现