Falls das Problem noch aktuell ist, hier meine Lösung in C.

Eingegeben wird die Anzahl der zu permutierenden Zeichen (N)
und die Nummer der auszugebenden Permutation (n).

Beispiel mit N = 5, n = 1
#1: 12345

Beispiel mit N = 5, n = 120
#120: 54321

Beispiel mit N = 3, n = 0
#1: 123
#2: 132
...
#6: 321

Beispiel mit n = 12, n = 100000
#100000: 12368AB59704

Code:
#include <stdio.h>
#include <string.h>

#define DIGITS "1234567890ABCDEF"

int print_perm (unsigned int N, unsigned int n0)
{
    char *l, letters[] = DIGITS;
    int j, digit[N];
    unsigned int n = n0;
    
    // n0 in faktorielle Darstellung umwandeln
    
    for (unsigned int i = 1; i <= N; i++)
    {
        digit[i-1] = n % i;
        n /= i;
    }
    
    if (n)
        return 0;
        
    // n0-te Permutation ausdrucken
    
    printf ("#%d: ", n0 + 1);
    
    for (int i = N-1; i >= 0; i--)
    {
        for (j = -1, l = letters - 1; j < digit[i]; j += *++l != ' ');
        printf ("%c", *l);

        // Gedruckte Zeichen aus Liste entfernen
        *l = ' ';
    }
    
    printf ("\n");
    
    return 1;
}

int main ()
{
    unsigned int n, N;
    
    printf ("\nAnzahl Zeichen: ");
    scanf ("%u", &N);

    printf ("\nPermutation Nr. (0 fuer alle): ");
    scanf ("%u", &n);
    
    if (N == 0 || N > strlen (DIGITS))
    {
        printf ("Ungueltige Eingabe: Anzahl Zeichen in 1..%d\n",
                strlen (DIGITS));
        return 1;
    }
    
    if (n)
        print_perm (N, n-1);
    else
        while (print_perm (N, n++));
    
    return 0;
}
Der Code ist einfach gehalten und berechnet die faktorielle Darstellung für jede Permutation neu.
Für eine effiziente Implementierung falls alle Permutationen gebraucht werden oder nur eine Teilmenge aus einer Obermenge auszuwählen ist, kann man eine Arithmetik auf der faktoriellen Darstellung implementieren.