Возможно ли создать некоторый Linq, который генерирует список, содержащий все возможные комбинации ряда чисел?
Если вы введете "21", он будет генерировать список с элементами:
list[0] = "21"
list[1] = "22"
list[2] = "11"
list[3] = "12"
(Не обязательно в этом порядке)
Я понимаю, что вы можете использовать диапазон, чтобы делать такие вещи, как:
List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
Что генерирует алфавит из a-z. Но я не могу передать эти знания, чтобы создать генератор комбинации
Я смог разобраться со следующим кодом, но он кажется слишком громоздким, и я уверен, что это можно сделать с помощью нескольких строк. Это действительно кажется плохим решением, которое я сделал.
Представьте, что я назвал GetAllCombinations("4321"), если он помогает
public static String[] GetAllCombinations(String s)
{
    var combinations = new string[PossibleCombinations(s.Length)];
    int n = PossibleCombinations(s.Length - 1);
    for (int i = 0; i < s.Length; i++)
    {
        String sub;
        String[] subs;
        if (i == 0)
        {
            sub = s.Substring(1); //Get the first number
        }
        else if (i == s.Length - 1)
        {
            sub = s.Substring(0, s.Length - 1);
        }
        else
        {
            sub = s.Substring(0, i) + s.Substring(i + 1); 
        }
        subs = GetAllCombinations(sub);
        for (int j = 0; j < subs.Length; j++)
        {
            combinations[i * n + j] = s[i] + subs[j];
        }
    }
    return combinations;
}
public static int PossibleCombinations(int n) //Combination possibilities. e.g 1-2-3-4 have 24 different combinations
{
    int result = 1;
    for (int i = 1; i <= n; i++)
        result *= i;
    return result;
}