Если вы не хотите вносить какие-либо большие алгоритмические изменения, ваша самая большая проблема здесь
combs.Add(all.First().Item1);
Это не имеет никакого смысла.Возможно, вы имели в виду
combs.Add(all.First(c => c.Item2 == str)).Item1);
Однако это будет очень медленно;если это то, что вам нужно, вы должны поместить результаты all
в хеш-таблицу, заданную строкой, и использовать ее вместо циклического просмотра результатов Distinct
.
Если вы хотите получать комбинации без вычисленийСначала перестановки, способ сделать это будет так.Учитывая некоторые объекты, найти комбинации длины K: если K равно 0, вернуть пустой список.Иначе, для каждого объекта возьмите этот объект, а затем рекурсивно добавьте все комбинации длины K-минус 1 к остальным объектам.