排列序号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排列序号相关的知识,希望对你有一定的参考价值。
代码(C++):
class Solution {
public:
/**
* @param A an integer array
* @return a long integer
*/
// 计算阶乘的函数
long long fac(int a) {
long long res = 1;
while (a != 1)
res *= a--;
return res;
}
long long permutationIndex(vector<int>& A) {
// Write your code here
if (A.empty()) return 0;
if (A.size() == 1) return 1;
long long res = 1;
vector<int> B(A);
sort(B.begin(), B.end());
// 记录位数
int dig = A.size()-1;
int j = 0;
for (int i = 0; i < A.size()-1; ++i) {
// 找出A中每一位数字在B中的位置
while (A[i] != B[j])
j++;
res += j*fac(dig--);
B.erase(B.begin()+j);
j = 0;
}
return res;
}
};
以上是关于排列序号的主要内容,如果未能解决你的问题,请参考以下文章