Skip to content

Commit b474b86

Browse files
committed
Improved task 3646
1 parent c70f62c commit b474b86

File tree

1 file changed

+22
-20
lines changed
  • src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number

1 file changed

+22
-20
lines changed

src/main/kotlin/g3601_3700/s3646_next_special_palindrome_number/Solution.kt

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
package 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

55
import java.util.Collections
66

77
class 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

Comments
 (0)