为什么这不会产生正确数量的字符串排列?对于
perm("ABC", 3)
它应该打印27种不同的排列。
private static List<string> permutated = new List<string>(30000);
public static List<string> perm(string s, int k) { return comb(s, "", k); }
private static List<string> perm(string s, string prefix, int k)
{
if (k == 0)
{
permutated.Add(prefix);
}
else
{
for (int i = 0; i < s.Length; i++)
{
perm( s.Substring( i + 1 ), prefix + s[i], k - 1 );
}
}
return permutated;
}
答案 0 :(得分:2)
您已在计算中计算combinations。对于comb("ABC", 3)
,应该有一个结果。
如果您想要permutations(六个结果),请使用s.Substring( i + 1 )
替换递归函数调用中的s.Substring(0, i) + s.Substring(i+1)
。
如果您想要27个结果,只需传递s
而不是s.Substring( i + 1 )
。