Gerar combinações de tamanho N a partir de uma lista
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 dos elementos de entrada 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(List.of(1, 2, 3, 4), 1) ➞ List.of(List.of(1), List.of(2), List.of(3), List.of(4))
Program.combo(List.of(1, 2, 3, 4), 2) ➞ List.of(List.of(1, 2), List.of(1, 3), List.of(1, 4), List.of(2, 3), List.of(2, 4), List.of(3, 4))
Program.combo(List.of(1, 2, 3, 4), 5) ➞ List.of()
Program.combo(List.of(1, 2, 3, 4), 0) ➞ List.of(List.of())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.