blob: 259d00b2665ddfd29a10d070b554723062a61cfa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
int getKth(int k, int* nums, int len)
{
int result = nums[k];
for(int i = k; i < len - 1; i++)
nums[i] = nums[i + 1];
return result;
}
char* getPermutation(int n, int k)
{
if(n == 0) return NULL;
char* result = malloc(sizeof(char) * (n + 1));
int use;
int nums[n];
int fac[n];
int len = n;
fac[0] = 1;
for(int i = 1; i < n; ++i) {
nums[i - 1] = i;
fac[i] = fac[i - 1] * i;
}
nums[n - 1] = n;
for(int i = 0; i < n; ++i) {
/* here k = n - 1, i.e. get 2th, index = 1 */
use = getKth(((k - 1) / fac[n - 1 - i]), nums, len);
len--;
k -= ((k - 1) / fac[n - 1 - i]) * fac[n - 1 - i];
result[i] = use + '0';
}
result[n] = '\0';
return result;
}
|