Question :
Given a permutation which contains no repeated number, find its index in all the permutations of these numbers, which are ordered in lexicographical order. The index begins at 1.
Example
Example
Given [1,2,4], return 1.
Solution :
例如[4,2,1],对于4, 比4小的有2和1, 在4这一位,对应的factor为2! (factor的含义是在当前位置数值指定的情况下,变化index大于当前数值的数字,所可能的到的不同排列的个数), 因此在index=0时,可能的排列一共有2*2!. 其它位同理
public class Solution {
/**
* @param A an integer array
* @return a long integer
*/
public long permutationIndex(int[] A) {
long res = 0;
long fact = 1;
for(int i = 1; i < A.length; i++) fact *= i; //set factor for first position
for(int i = 0; i < A.length; i++) {
int smaller = 0;
for(int j = i + 1; j < A.length; j++) {
if(A[j] < A[i]) smaller ++;
}
res += smaller * fact;
if(A.length - i - 1 != 0)
fact = fact / (A.length - i - 1); //get factor for next position
}
return res + 1;
}
}