题目
题目分析
给定两个数 n 和 k ,让我们求 1 ~ n 的第k个全排列。
首先,对于 n 个数的全排列来说,我们先来看第一个数确定之后,之后的全排列的个数:
以 1 开头的全排列的个数为: (n-1)!
以 2 开头的全排列的个数为: (n-1)!
… …
以 n 开头的全排列的个数为: (n-1)!
当确定第一个数之后,我们对于第二个数来说,他的全排列有: (n-2)!个,向后一次类推即可。
class Solution {
public:
string getPermutation(int n, int k) {
string res;
vector<bool> st(11 , 0);
for(int i = 0; i < n; i++)
{
int fac = 1;
for(int j = 1; j <= n - 1 - i; j++) fac *= j;
for(int j = 1; j <= n; j++)
{
if(!st[j])
{
if(k > fac) k -= fac;
else
{
st[j] = true;
res += j + '0';
break;
}
}
}
}
return res;
}
};