给出集合
[1,2,3,...,n]
,其所有元素共有n!
种排列。按大小顺序列出所有排列情况,并一一标记,当
n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定
n
和k
,返回第k
个排列。
示例 1:
输入:n = 3, k = 3 输出:"213"
示例 2:
输入:n = 4, k = 9 输出:"2314"
示例 3:
输入:n = 3, k = 1 输出:"123"
提示:
1 <= n <= 9
1 <= k <= n!
投机取巧就直接全排,其实也可以试试康托展开和逆康托展开
class Solution {
public:
string getPermutation(int n, int k) {
string str = "";
for(int i = 1;i <= n;i++) str += i +'0';
int cnt = 0;
do{
cnt++;
if(cnt == k) return str;
}while(next_permutation(str.begin(),str.end()));
return str;
}
};