1
+ package medium ;
2
+
3
+ import java .util .List ;
4
+ import java .util .ArrayList ;
5
+
6
+ class lc60 {
7
+ public String getPermutation (int n , int k ) {
8
+ List <Integer > numbers = new ArrayList <>();
9
+ for (int i = 1 ; i <= n ; i ++) {
10
+ numbers .add (Integer .valueOf (i ));
11
+ }
12
+ return getPermutation (numbers , k );
13
+ }
14
+
15
+ private String getPermutation (List <Integer > numbers , int k ) {
16
+ int size = numbers .size ();
17
+ if (size == 0 ) {
18
+ return "" ;
19
+ }
20
+ if (k == 1 ) {
21
+ return getString (numbers );
22
+ }
23
+ if (k == count (size )) {
24
+ return getReverseString (numbers );
25
+ }
26
+ while (true ) {
27
+ int count = count (size - 1 );
28
+ if (count < k ) {
29
+ int a = k / count ;
30
+ int b = k % count ;
31
+ if (b == 0 ) {
32
+ Integer p = numbers .get (a - 1 );
33
+ numbers .remove (a - 1 );
34
+ return String .valueOf (p ) + getReverseString (numbers );
35
+ } else {
36
+ Integer p = numbers .get (a );
37
+ numbers .remove (a );
38
+ return String .valueOf (p ) + getPermutation (numbers , b );
39
+ }
40
+ } else {
41
+ Integer p = numbers .get (0 );
42
+ numbers .remove (0 );
43
+ return String .valueOf (p ) + getPermutation (numbers , k );
44
+ }
45
+ }
46
+ }
47
+
48
+ private int count (int n ) {
49
+ int result = 1 ;
50
+ for (int i = 1 ; i <= n ; i ++) {
51
+ result *= i ;
52
+ }
53
+ return result ;
54
+ }
55
+
56
+ private String getString (List <Integer > numbers ) {
57
+ StringBuilder sb = new StringBuilder ();
58
+ for (int i = 0 ; i < numbers .size (); i ++) {
59
+ sb .append (numbers .get (i ));
60
+ }
61
+ return sb .toString ();
62
+ }
63
+
64
+ private String getReverseString (List <Integer > numbers ) {
65
+ StringBuilder sb = new StringBuilder ();
66
+ for (int i = numbers .size () - 1 ; i >= 0 ; i --) {
67
+ sb .append (numbers .get (i ));
68
+ }
69
+ return sb .toString ();
70
+ }
71
+ }
0 commit comments