Combinação de letras

Pessoal, boa tarde.
Alguém já postou aqui no fórum alguma pergunta refere a análise combinatória com letras?
Ex.: o usuário digita uma sequência de letras tipo ABCDEA e o nº de sequencias que ele quer tipo 24 combinações diferentes. É possível fazer um assim e como?

Eu tenho este código
public static void main(String[] args){
String[] arr = {“A”,“B”,“C”,“D”,“E”};
combinations2(arr, 3, 0, new String[5]);
}

    static void combinations2(String[] arr, int len, int startPosition, String[] result){
        if (len == 0){
            System.out.println(Arrays.toString(result));
            return;
        }       
        for (int i = startPosition; i <= arr.length-len; i++){
            result[result.length - len] = arr[i];
            combinations2(arr, len-1, i+1, result);
        }
    }     

Ele gera essas combinações:
[A, B, C]
[A, B, D]
[A, B, E]
[A, C, D]
[A, C, E]
[A, D, E]
[B, C, D]
[B, C, E]
[B, D, E]
[C, D, E]

Eu queria que a partir de um nº digitado pelo usuário, ex.: 12 ele gerasse 12 combinações diferentes.
ABCDEA
AEDCBA

Você pode adicionar um contador, para ir contabilizando as combinações geradas. Fiz essa alteração adicionados mais dois parâmetros (count e total) para a função combination2. Esse algoritmo vai pegar sempre as N primeiras combinações se possível.

import java.util.*;

public class Main {
    
    public static void main(String[] args) {
        String[] arr = {"A","B","C","D","E"};
        combinations2(arr, 3, 0, new String[3], 4, 0);
    }

    private static int combinations2(String[] arr, int len, 
        int startPosition, String[] result, int total, int count)
    
    {
        if(count >= total) return count; //finaliza;
        
        if (len == 0){
            System.out.println(Arrays.toString(result));
            count++; // mais uma combinação
            
            return count;
        }
        
        for (int i = startPosition; i <= arr.length-len; i++){
            result[result.length - len] = arr[i];
            
            count = combinations2(
                arr, len-1, i+1, result,
                total, count
            );
            
            if(count >= total) return count; // encerra o algoritmo
        }
        
        return count;
    }
}

Outra solução é criar uma variável global como contador!

Valeu mais uma dúvida. Suponhamos que eu aumente o array [6] e len também para 6 com o mesmo total por que só tenho uma combinação? Para aumentar para 12 combinações por exemplo, seria como?
[B, A, C, D, E, B]

Esse algoritmo faz uma combinação, ou seja combinação de 6 elementos agrupados em 6:
C6,6 = 6! / (!6 • (6 - 6)!) = 6! / (6! • 0!) = 1

Como pode ver só existe uma combinação, talvez o que você tem em mente seja uma permutação!

Essa fórmula: (n-1)!/2 seria permutação?

Eu desconheço essa fórmula. A fórmula de uma permutaçao simple é:
Pn = n!

Se você quer um algoritmo que gere todas as permutacões de uma palavra, tem esse site aqui: