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.
class Solution {
public:
/**
* @param A an integer array
* @return a long integer
*/
long long permutationIndex(vector<int>& A) {
// Write your code here
if (A.size() == 0)
return 0;
vector<int> auxVtr(A.size(), 0);
for (int i=0; i<A.size(); i++)
{
for (int j=i+1; j<A.size(); j++)
{
if (A[j] < A[i])
auxVtr[i]++; //这里后面的数比当前小的个数
}
}
long long retIdx = 0;
long long pi = 1;
int step = 1;
for (int i=A.size()-2; i>=0; i--) //从后到前,可以避免重复计算pi
{
retIdx += auxVtr[i] * pi;
pi = pi*(++step); //这里需要小心
}
return retIdx+1;
}
};