我目前正在研究一個項目,我需要從給定的一組字符中生成所有可能的排列。我目前使用此代碼:使用相同字母的排列
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