leetCode60. 排列序列
方法一:语法版,面试官不认可的方法:next_permutation函数
// 方法一:使用next_permutation函数,将某容器设置为当前按照字典序
// 的下一个全排列的内容
class Solution {
public:
string getPermutation(int n, int k) {
string res = "";
for(int i = 1; i <= n; i++) res += to_string(i);
for(int i = 0; i < k - 1; i++){
next_permutation(res.begin(),res.end());
}
return res;
}
};
方法二:面试官认可的办法
题解
代码
class Solution {
public:
string getPermutation(int n, int k) {
string res;
vector<bool> st(10); // 因为n = 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(k > fact) k -= fact; // 当前位置不选,阶乘比fact小的才选
else{
res += to_string(j);
st[j] = true;
break; // 当前位置选好了,选择下一个位置该填写那个
}
}
}
}
return res;
}
};