Project Euler Problem #24

HTML

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:<br/>
<br/>
012   021   102   120   201   210<br/>
<br/>
What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?<br/>

JavaScript

var getNthLexicographicPermutation = function(sortedAvailableDigits, n){
    var length = sortedAvailableDigits.length;
    if(length == 1){
        return (n == 1) ? sortedAvailableDigits[0] : null;
    }
    
    var combinationsWithoutFirstDigit = 1;
    for(var i = 2; i < length; i++){
        combinationsWithoutFirstDigit *= i;
    }
    
    var firstDigitIndex = Math.floor((n-1) / combinationsWithoutFirstDigit);
    if(firstDigitIndex >= length){
        return null;
    }
    return sortedAvailableDigits.splice(firstDigitIndex, 1) + getNthLexicographicPermutation(sortedAvailableDigits, n - (firstDigitIndex * combinationsWithoutFirstDigit));
};

var digits = ['0', '1', '2'];


console.log(getNthLexicographicPermutation(digits, 6));

digits_0_9 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];

console.log(getNthLexicographicPermutation(digits_0_9, 1000000));