【发布时间】:2020-11-20 12:51:54
【问题描述】:
我有打印给定字符串所有可能排列的代码。如何设置一个排列的长度?例如,如果长度为 2,则输出应包含 ABCD 的 6 个可能排列。
class GFG
{
/**
* permutation function
* @param str string to
calculate permutation for
* @param l starting index
* @param r end index
*/
private static void permute(String str,
int l, int r)
{
if (l == r)
Console.WriteLine(str);
else
{
for (int i = l; i <= r; i++)
{
str = swap(str, l, i);
permute(str, l + 1, r);
str = swap(str, l, i);
}
}
}
/**
* Swap Characters at position
* @param a string value
* @param i position 1
* @param j position 2
* @return swapped string
*/
public static String swap(String a,
int i, int j)
{
char temp;
char[] charArray = a.ToCharArray();
temp = charArray[i] ;
charArray[i] = charArray[j];
charArray[j] = temp;
string s = new string(charArray);
return s;
}
// Driver Code
public static void Main()
{
String str = "ABCD";
int n = str.Length;
permute(str, 0, n-1);
}
}
【问题讨论】:
-
如果长度为2且有4个字符,则有12个潜在输出。
-
如果输出的长度与输入的长度不同,则不是排列。来自wikipedia article:“在数学中,集合的排列是,松散地说,将其成员排列成序列或线性顺序,或者如果集合已经有序,则重新排列其元素。”您正在寻找一种从集合中选择特定大小的所有子集的方法。
-
@Martin 对不起。我对另一个例子感到困惑。
标签: c# permutation