A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:

012 021 102 120 201 210

What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?


In [1]:
from itertools import permutations

In [2]:
reduce((lambda x, y: x + y), zip(permutations('012'), xrange(2))[-1][0])


Out[2]:
'021'

In [3]:
def foo(n, m):
    return reduce((lambda x, y: x + y), zip(permutations(m), xrange(n))[-1][0])

In [4]:
%timeit foo(1000000, '0123456789')
foo(1000000, '0123456789')


1 loops, best of 3: 369 ms per loop
Out[4]:
'2783915460'