Gere combinações de tamanho N a partir de um array

Crie uma função que retorne todas as combinações de tamanho n de um array. Ordene o array em ordem lexicográfica crescente.

Exemplos

combo([1, 2, 3, 4], 1) ➞ [[1], [2], [3], [4]]

combo([1, 2, 3, 4], 2) ➞ [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

combo([1, 2, 3, 4], 5) ➞ []

combo([1, 2, 3, 4], 0) ➞ [[]]

Observações

  • Ordem lexicográfica: Compare o primeiro elemento: [1, 2] virá antes de [2, 4]. Se ambos tiverem o mesmo primeiro elemento, compare o segundo: [1, 2] vem antes de [1, 3] e assim por diante.
  • Retorne um array vazio [] se n exceder o tamanho do array.
  • Retorne [[]] se n for 0 (veja o exemplo nº 4). (Isso ocorre porque há apenas uma combinação de comprimento 0: um array vazio).