码迷,mamicode.com
首页 > 其他好文 > 详细

排列序号

时间:2017-07-22 18:18:17      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:ras   array   分享   return   ges   ati   ++i   a long   计算   

代码(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;
}
};

技术分享

排列序号

标签:ras   array   分享   return   ges   ati   ++i   a long   计算   

原文地址:http://www.cnblogs.com/majixian/p/7221838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!