Note:
每次确定一个位置之后,那么剩下的所有全排列的数量就是剩余位置的阶乘个
比如说4个位置,第一个位置定一个数的话,以当前数字为首的全排列组合共有个3!个
那么思路如下:
代码如下:
class Solution {
public:
string getPermutation(int n, int k) {
string res;
vector<bool> st(10);
for(int i = 0; i < n; i ++){
int fact = 1;
for(int j = 1; j <= n - i - 1; j ++) fact *= j;
for(int j = 1; j <= n; j ++){
if(!st[j]){
if(fact < k) k -= fact;
else{
res += to_string(j);
st[j] = true;
break;
}
}
}
}
return res;
}
};