Все возможные комбинации списка ценностей - PullRequest
31 голосов
/ 18 октября 2011

У меня есть список целых чисел в моей программе на C #. Тем не менее, я знаю количество элементов в моем списке только во время выполнения.

Допустим, ради простоты мой список {1, 2, 3} Теперь мне нужно сгенерировать все возможные комбинации следующим образом. {1, 2, 3} {1, 2} {1, 3} {2, 3} {1} {2} {3}

Может кто-нибудь помочь с этим?

Ответы [ 12 ]

0 голосов
/ 14 мая 2018

А как же

static void Main(string[] args)
{
     Combos(new [] { 1, 2, 3 });
}

static void Combos(int[] arr)
{
    for (var i = 0; i <= Math.Pow(2, arr.Length); i++)
    {
        Console.WriteLine();
        var j = i;
        var idx = 0;
        do 
        {
            if ((j & 1) == 1) Console.Write($"{arr[idx]} ");
        } while ((j >>= 1) > 0 && ++idx < arr.Length);
    }
}
0 голосов
/ 13 октября 2016

Мы можем использовать рекурсию для задач комбинирования / перестановки, включающих строки или целые числа.

public static void Main(string[] args)
{
    IntegerList = new List<int> { 1, 2, 3, 4 };

    PrintAllCombination(default(int), default(int));
}

public static List<int> IntegerList { get; set; }

public static int Length { get { return IntegerList.Count; } }

public static void PrintAllCombination(int position, int prefix)
{
    for (int i = position; i < Length; i++)
    {
        Console.WriteLine(prefix * 10 + IntegerList[i]);
        PrintAllCombination(i + 1, prefix * 10 + IntegerList[i]);
    }

}
...