我目前正在研究一个项目,我需要从给定的一组字符中生成所有可能的排列。我目前使用此代码:使用相同字母的排列
public static IEnumerable<string> AllPermutations(this IEnumerable<char> s)
{
return s.SelectMany(x =>
{
var index = Array.IndexOf(s.ToArray(), x);
return s.Where((y, i) => i != index).AllPermutations().Select(y => new string(new[] { x }.Concat(y).ToArray())).Union(new[] { new string(new[] { x }) });
}).Distinct();
}
从this答案。
我遇到的问题是它不会生成多次使用相同字母的permuations。
例如,如果我用abcde
作为输入我需要它像aaaaa
和dcc
等
我没有足够的经验与LINQ来理解代码停止重复的字母组合产生。任何帮助是极大的赞赏。
有什么理由这样做一个有趣的一个在LINQ中? – 2012-03-09 13:54:10
我没有写这个,所以只是寻找真正做到这个工作的代码。 – 2012-03-09 13:54:58
'aaaaa'不是'abcde'的排列组合。如果你的项目需要排列不包括'aaaaa',如果你包含'aaaaa',不要把它称为排列(或者组合)。你只会混淆每个人阅读你的问题,包括你自己。 – 2012-03-09 13:55:52