1.第k个排列
思路:数学+缩小问题规模
class Solution { public: string getPermutation(int n, int k) { vector<int> factorial(n); factorial[0] = 1; for (int i = 1; i < n; ++i) { factorial[i] = factorial[i - 1] * i; } --k; string ans; vector<int> valid(n + 1, 1); for (int i = 1; i <= n; ++i) { int order = k / factorial[n - i] + 1; for (int j = 1; j <= n; ++j) { order -= valid[j]; if (!order) { ans += (j + '0'); valid[j] = 0; break; } } k %= factorial[n - i]; } return ans; } };