本题是要将1-9的n个数按从小到大全排,找到其中第k个序列。
思路:从最高位开始,固定最高位后面的数都有(n-1)!种排列组合,与k比较大小既可以确定第一位数,固定第二位数后面有(n-2)!中排列组合,按此规律即可确定第k个序列
class Solution {
public:
string getPermutation(int n, int k) {
string dict(n, 0);
iota(dict.begin(), dict.end(), '1');
vector<int> fract(n, 1);
for (int idx = n - 3; idx >= 0; --idx) {
fract[idx] = fract[idx + 1] * (n - 1 - idx);
}
--k;
string ret(n, 0);
for (int idx = 0; idx < n; ++idx) {
int select = k / fract[idx];
k %= fract[idx];
ret[idx] = dict[select];
dict.erase(next(dict.begin(), select));
}
return ret;
}
};