Project Euler
Problem 24: Lexicographic Permutations

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?


I used Narayana Pandita's algorithm to generate successive lexicographic permutations of my number set. I ran the algorithm 1,000,000 times to arrive at the answer. I made helper functions for each step of the algorithm.

Narayana Pandita's algorithm:

  1. Find the largest index k such that a [ k ] < a [ k + 1 ] . If no such index exists, the permutation is the last permutation.
  2. Find the largest index l greater than k such that a [ k ] < a [ l ] .
  3. Swap the value of a [ k ] with that of a [ l ] .
  4. Reverse the sequence from a [ k + 1 ] up to and including the final element a [ k ] .

102,280