给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。
您在真实的面试中是否遇到过这个题?例如,排列[1,2,4]是第1个排列。
相关题目 Expand
public class Solution {
/**
* @param A an integer array
* @return a long integer
*/
public long permutationIndex(int[] A) {
// Write your code here
if(null==A||0==A.length){
return 1;
}
long res = 1;
for(int i=0;i<A.length-1;i++){
res +=findPos(A, i)*muti(A.length-1-i);
}
return res;
}
public int findPos(int[] A,int s){
int pos = 0;//表示第几大
for(int i=s+1;i<A.length;i++){
if(A[i]<A[s]){
pos++;
}
}
return pos;
}
public long muti(int n){
long mu = 1;
for(int i=n;i>1;i--){
mu *=i;
}
return mu;
}
}