11package g3601_3700.s3646_next_special_palindrome_number
22
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 %)
44
55import java.util.Collections
66
77class Solution {
8- private val specials: MutableList <Long > = ArrayList <Long >()
8+ companion object {
9+ private val SPECIALS = mutableListOf<Long >()
10+ }
911
1012 fun specialPalindrome (n : Long ): Long {
11- if (specials .isEmpty()) {
12- init (specials )
13+ if (SPECIALS .isEmpty()) {
14+ init (SPECIALS )
1315 }
14- var pos = specials .binarySearch< Long > (n + 1 )
16+ var pos = SPECIALS .binarySearch(n + 1 )
1517 if (pos < 0 ) {
1618 pos = - pos - 1
1719 }
18- return specials [pos]
20+ return SPECIALS [pos]
1921 }
2022
2123 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 )) {
2527 var sum = 0
2628 var oddCnt = 0
2729 for (d in 1 .. 9 ) {
@@ -40,19 +42,19 @@ class Solution {
4042 for (d in 1 .. 9 ) {
4143 if ((mask and (1 shl (d - 1 ))) != 0 ) {
4244 if (d % 2 == 1 ) {
43- mid = (' 0' .code + d).toChar( ).toString()
45+ mid = (' 0' + d).toString()
4446 }
4547 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)
4850 }
4951 }
5052 }
51- Collections .sort< Char >(half )
52- permute(half, 0 , v, mid!! )
53+ half .sort( )
54+ permute(half, 0 , v, mid)
5355 }
54- v.sort< Long > ()
55- val set: MutableSet < Long > = LinkedHashSet < Long > (v)
56+ v.sort()
57+ val set = LinkedHashSet (v)
5658 v.clear()
5759 v.addAll(set)
5860 }
@@ -63,17 +65,17 @@ class Solution {
6365 for (c in half) {
6466 left.append(c)
6567 }
66- val right = StringBuilder ( left).reverse ().toString()
68+ val right = left.reversed ().toString()
6769 val s = left.toString() + mid + right
6870 if (s.isNotEmpty()) {
6971 val x = s.toLong()
7072 v.add(x)
7173 }
7274 return
7375 }
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 ) {
7779 continue
7880 }
7981 swapped.add(half[i])
0 commit comments