C# 递归地从数组中获取所有可能的排列
我有一个数字字符数组:C# 递归地从数组中获取所有可能的排列,c#,loops,recursion,C#,Loops,Recursion,我有一个数字字符数组: static char[] numbers = {'0','1','2','3','4','5','6','7','8','9'}; 我需要做一个函数,将它们组合成所有可能的组合,最多3位数。像这样: 0 1 2 3 00 01 02 03 10 11 12 13 20 21 22 23 30 31 32 33 000 001 002 003 010 011 像那样,但有所有可能的组合。 到目前为止,我已经使用了if-inside的for循环,但是我发现使用递归函数更
static char[] numbers = {'0','1','2','3','4','5','6','7','8','9'};
我需要做一个函数,将它们组合成所有可能的组合,最多3位数。像这样:
0
1
2
3
00
01
02
03
10
11
12
13
20
21
22
23
30
31
32
33
000
001
002
003
010
011
像那样,但有所有可能的组合。
到目前为止,我已经使用了if-inside的for循环,但是我发现使用递归函数更好
做这件事的最佳和最快的方法是什么?好吧,这就是我想到的代码
static char[] numbers = {'0','1','2','3','4','5','6','7','8','9'};
static bool continuar = true;
private static void Start(int maxLength)
{
for (int i = 0; i <= maxLength; i++)
Permutations(i, 0, "");
}
private static void Permutations(int keyLength, int position, string baseString)
{
bool print = true;
if (continuar)
{
for (int i = 0; i < numbers .Length; i++)
{
string temp = baseString + numbers [i];
if (position <= keyLength - 1)
{
Permutations(keyLength, position + 1, temp);
print = false;
}
if (continuar && print)
Console.WriteLine(temp);
}
}
}
简短易读还是快速?您可以使用这种快速实现,它也值得一读:对于任务所花费的计算机时间来说,这是最快的,但也是最好的编码方式。除非您想要并行编程,否则最好的办法是按照您自然的方式来做-一个从字符0到9开始的函数,最多可以获得3个从0到9开始的组合,适用于所有角色。但你真的必须通过基准测试来为自己找到真正的答案。