1
1
package g3601_3700.s3646_next_special_palindrome_number
2
2
3
- // #Hard #Weekly_Contest_462 #2025_08_11_Time_1758_ms_ (100.00%)_Space_70.14_MB_(100.00 %)
3
+ // #Hard #Weekly_Contest_462 #2025_08_12_Time_34_ms_ (100.00%)_Space_53.80_MB_(66.67 %)
4
4
5
5
import java.util.Collections
6
6
7
7
class Solution {
8
- private val specials: MutableList <Long > = ArrayList <Long >()
8
+ companion object {
9
+ private val SPECIALS = mutableListOf<Long >()
10
+ }
9
11
10
12
fun specialPalindrome (n : Long ): Long {
11
- if (specials .isEmpty()) {
12
- init (specials )
13
+ if (SPECIALS .isEmpty()) {
14
+ init (SPECIALS )
13
15
}
14
- var pos = specials .binarySearch< Long > (n + 1 )
16
+ var pos = SPECIALS .binarySearch(n + 1 )
15
17
if (pos < 0 ) {
16
18
pos = - pos - 1
17
19
}
18
- return specials [pos]
20
+ return SPECIALS [pos]
19
21
}
20
22
21
23
private fun init (v : MutableList <Long >) {
22
- val half: MutableList < Char > = ArrayList <Char >()
23
- var mid: String?
24
- for (mask in 1 .. < (1 shl 9 )) {
24
+ val half = mutableListOf <Char >()
25
+ var mid: String
26
+ for (mask in 1 until (1 shl 9 )) {
25
27
var sum = 0
26
28
var oddCnt = 0
27
29
for (d in 1 .. 9 ) {
@@ -40,19 +42,19 @@ class Solution {
40
42
for (d in 1 .. 9 ) {
41
43
if ((mask and (1 shl (d - 1 ))) != 0 ) {
42
44
if (d % 2 == 1 ) {
43
- mid = (' 0' .code + d).toChar( ).toString()
45
+ mid = (' 0' + d).toString()
44
46
}
45
47
val h = d / 2
46
- for (i in 0 .. < h) {
47
- half.add(( ' 0' .code + d).toChar() )
48
+ repeat( h) {
49
+ half.add(' 0' + d)
48
50
}
49
51
}
50
52
}
51
- Collections .sort< Char >(half )
52
- permute(half, 0 , v, mid!! )
53
+ half .sort( )
54
+ permute(half, 0 , v, mid)
53
55
}
54
- v.sort< Long > ()
55
- val set: MutableSet < Long > = LinkedHashSet < Long > (v)
56
+ v.sort()
57
+ val set = LinkedHashSet (v)
56
58
v.clear()
57
59
v.addAll(set)
58
60
}
@@ -63,17 +65,17 @@ class Solution {
63
65
for (c in half) {
64
66
left.append(c)
65
67
}
66
- val right = StringBuilder ( left).reverse ().toString()
68
+ val right = left.reversed ().toString()
67
69
val s = left.toString() + mid + right
68
70
if (s.isNotEmpty()) {
69
71
val x = s.toLong()
70
72
v.add(x)
71
73
}
72
74
return
73
75
}
74
- val swapped: MutableSet < Char ?> = HashSet <Char ? >()
75
- for (i in start.. < half.size) {
76
- if (swapped.contains( half[i]) ) {
76
+ val swapped = mutableSetOf <Char >()
77
+ for (i in start until half.size) {
78
+ if (half[i] in swapped ) {
77
79
continue
78
80
}
79
81
swapped.add(half[i])
0 commit comments