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 = 10for(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;}
};