class Solution { public String getPermutation(int n, int k) { int[] n1 = new int[n]; int[] n2 = new int[n]; Arrays.fill(n2, 1); n1[0] = 1; for (int i = 1; i < n; ++i) { n1[i] = n1[i - 1] * i; } StringBuilder res = new StringBuilder();
--k; for (int i = 1; i < n + 1; ++i) { int tmp = k / n1[n - i] + 1; for (int j = 1; j < n + 1; ++j) { tmp -= n2[j - 1]; if (tmp == 0) { res.append(j); n2[j - 1] = 0; break; } } k %= n1[n - i]; } return res.toString(); } }
python3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class Solution: def getPermutation(self, n: int, k: int) -> str: n1 = [1] n2 = [1] * n for i in range(1, n): n1.append(n1[-1] * i) k -= 1 res = list() for i in range(1, n + 1): tmp = k // n1[n - i] + 1 for j in range(1, n + 1): tmp -= n2[j - 1] if tmp == 0: res.append(str(j)) n2[j - 1] = 0 break k %= n1[n - i] return "".join(res)