请问一个组合算法的实现有关问题
请教一个组合算法的实现问题
假设我有一组序列,假设为
我希望得到一个由原始序列构成的所有的组合,但是得到的组合及排序希望是下面这个样子的:
请问如何用C#代码实现,谢谢。
------解决方案--------------------
仅供参考:
static void Main(string[] args)
{
string[] outStr=OutputString("ABC");
foreach(string str in outStr)
{
Console.WriteLine(str);
}
Console.ReadKey();
}
static string[] OutputString(string str)
{
if (str == string.Empty)
{
return new string[] { string.Empty };
}
string[] result = new string[1 << str.Length];
for (int i = 0; i < 1 << str.Length - 1; i++)
{
result[i] = OutputString(str.Remove(0, 1))[i];
}
for (int i = 1 << str.Length - 1; i < 1 << str.Length; i++)
{
result[i] = string.Format("{0}{1}", str[0], OutputString(str.Remove(0, 1))[i - (1 << str.Length - 1)]);
}
return result;
}
输出:
C,
B,
BC,
A,
AC,
AB,
ABC
假设我有一组序列,假设为
int[] data = new int[] {1, 2, 3};
我希望得到一个由原始序列构成的所有的组合,但是得到的组合及排序希望是下面这个样子的:
请问如何用C#代码实现,谢谢。
------解决方案--------------------
仅供参考:
static void Main(string[] args)
{
string[] outStr=OutputString("ABC");
foreach(string str in outStr)
{
Console.WriteLine(str);
}
Console.ReadKey();
}
static string[] OutputString(string str)
{
if (str == string.Empty)
{
return new string[] { string.Empty };
}
string[] result = new string[1 << str.Length];
for (int i = 0; i < 1 << str.Length - 1; i++)
{
result[i] = OutputString(str.Remove(0, 1))[i];
}
for (int i = 1 << str.Length - 1; i < 1 << str.Length; i++)
{
result[i] = string.Format("{0}{1}", str[0], OutputString(str.Remove(0, 1))[i - (1 << str.Length - 1)]);
}
return result;
}
输出:
C,
B,
BC,
A,
AC,
AB,
ABC