问题
https://leetcode.com/problems/permutation-sequence/
解法
复杂度o(n^2)
class Solution {
public:
string getPermutation(int n, int k) {
bool flag[n+1];
int f = 1;
for (int i=1; i<=n; ++i)
{
f*= i;
flag[i] = true;
}
string ret(n, '0');
for (int i=0; i<n; ++i)
{
f /= (n-i);
int reverse = n- i -1;
int v;
for (int j=reverse; j>=0; --j)
if (j*f < k)// 第j大数 前面有j *((now-1)!) 个数, 找到最大的j
{
v = j;
break;
}
k-= v*f;
int s = -1;
for (int j=1; j<= n; ++j)//找第v大数。
if (flag[j])
{
++s;
if (s== v)
{
ret[i] += j;
flag[j] = false;
break;
}
}
}
return ret;
}
};