题目描述:给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。
说明:
给定 n 的范围是 [1, 9]。
给定 k 的范围是[1, n!]。
示例 1:
输入: n = 3, k = 3
输出: "213"
num_list 记录从1到n的数 例如n=3, num_list=[1,2,3]
res_int 记录要返回的结果(但是是int型)
get_jiecheng来获得一个数的阶乘
to_string函数用来转换数据类型,将int转化为需要返回的string型。
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗 :8.6 MB, 在所有 C++ 提交中击败了5.07%的用户
如下图所示:
具体代码如下:
class Solution {
public:
int get_jiecheng(int k2){
int k1=1;
for(int i=1;i<=k2;i++){
k1 =k1*i;
}
return k1;
}
string getPermutation(int n, int k) {
vector<int> num_list;
vector<int> res_int;
for(int i=1;i<=n;i++){
num_list.push_back(i);
}
int v_size;
string res;
while(num_list.size()!=0){
v_size = num_list.size();
int pos = (k-1)/get_jiecheng(n-1);
res_int.push_back(num_list[pos]);
num_list.erase(num_list.begin()+pos);
k = k - pos*get_jiecheng(n-1);
n--;
}
for(int i=0;i<res_int.size();i++){
res+= to_string(res_int[i]);
}
return res;
}
};