执行用时:4ms
语言:cpp
思路:和求十进制数各位数类似,用k/(n-1)!判断每一位是该位的第几轮排列,再让k%(n-1)!计算下一位
代码:
class Solution {
public:
string getPermutation(int n, int k) {
int m = fac(n);
string res = "";
vector<int> tb;
for(int i = 1;i <= n;i++){
tb.push_back(i);
}
int i = n -1;
k--;
while(i > 0){
int t = fac(i);
int j = k / t;
char c = (tb[j] + '0');
res += c;
tb.erase(tb.begin()+j);
k %= t;
i--;
}
res += (tb[0] + '0');
return res;
}
private:
int fac(int n){
int res = 1;
for(int i = 2;i <= n;i++){
res *= i;
}
return res;
}
};