Combinações de tamanho N
Crie um método genérico que retorne todas as combinações de tamanho n de uma coleção que já está ordenada. Preserve a ordem de entrada dos elementos dentro de cada combinação e retorne as combinações em ordem lexicográfica crescente. Os elementos podem ser números, strings ou qualquer outro tipo de elemento compatível com o código inicial fornecido.
Exemplos
Program.Combo(new int[] { 1, 2, 3, 4 }, 1) ➞ new int[][] { new int[] { 1 }, new int[] { 2 }, new int[] { 3 }, new int[] { 4 } }
Program.Combo(new int[] { 1, 2, 3, 4 }, 2) ➞ new int[][] { new int[] { 1, 2 }, new int[] { 1, 3 }, new int[] { 1, 4 }, new int[] { 2, 3 }, new int[] { 2, 4 }, new int[] { 3, 4 } }
Program.Combo(new int[] { 1, 2, 3, 4 }, 5) ➞ new int[][] { }
Program.Combo(new int[] { 1, 2, 3, 4 }, 0) ➞ new int[][] { new int[] { } }Observações
- A ordem lexicográfica compara primeiro os primeiros elementos:
[1, 2]vem antes de[2, 4]. Quando os primeiros elementos são iguais, compare os segundos:[1, 2]vem antes de[1, 3], e assim por diante. - Retorne uma coleção externa vazia se
nexceder o tamanho da entrada. - Retorne uma combinação vazia se
nfor0, pois existe exatamente uma combinação de tamanho zero.