題目描述:給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列旗芬。
按大小順序列出所有排列情況撮奏,并一一標(biāo)記报账,當(dāng) n = 3 時(shí), 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
給定 n 和 k,返回第 k 個(gè)排列董济。
說(shuō)明:
給定 n 的范圍是 [1, 9]步清。
給定 k 的范圍是[1, n!]。
示例 1:
輸入: n = 3, k = 3
輸出: "213"
num_list 記錄從1到n的數(shù) 例如n=3虏肾, num_list=[1,2,3]
res_int 記錄要返回的結(jié)果(但是是int型)
get_jiecheng來(lái)獲得一個(gè)數(shù)的階乘
to_string函數(shù)用來(lái)轉(zhuǎn)換數(shù)據(jù)類型廓啊,將int轉(zhuǎn)化為需要返回的string型。
執(zhí)行用時(shí) :0 ms, 在所有 C++ 提交中擊敗了100.00% 的用戶
內(nèi)存消耗 :8.6 MB, 在所有 C++ 提交中擊敗了5.07%的用戶
如下圖所示:
圖片.png
具體代碼如下:
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;
}
};