首页 > 代码库 > 排列序号
排列序号
代码(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;
}
};
排列序号