60.排列序列
思路:方法一,直接使用next_permutation()函数,一步起飞。
class Solution {
public:
string getPermutation(int n, int k) {
string s="";
for(int i=1;i<=n;i++){
s=s+to_string(i);
}
do{
if((--k)==0) break;
}while(next_permutation(s.begin(),s.end()));
return s;
}
};
思路:方法二,咱们使用康托逆展开,秒出结果。
class Solution {
public:
string getPermutation(int n, int k) {
string s="";
vector<int> v;
int f[10]={1};
for(int i=1;i<=n;i++){
v.push_back(i);
f[i]=f[i-1]*i;
}
k--;
while(--n>=0){
int t=k/f[n];
k=k%f[n];
s=s+to_string(v[t]);
v.erase(v.begin()+t);
}
return s;
}
};