1
+ import java.util.*
2
+
3
+ class RemoveKDigitsKotlin402 {
4
+ fun removeKdigits (num : String , k : Int ): String {
5
+ if (num.length == k) {
6
+ return " 0"
7
+ }
8
+ val charStack: Stack <Char > = Stack ()
9
+ var currentK = k
10
+ num.forEach {
11
+ while (currentK > 0 && charStack.isNotEmpty() && charStack.peek() > it) {
12
+ charStack.pop()
13
+ -- currentK
14
+ }
15
+ charStack.push(it)
16
+ }
17
+ while (currentK > 0 ) {
18
+ charStack.pop()
19
+ -- currentK
20
+ }
21
+ val result = StringBuilder ()
22
+ while (charStack.isNotEmpty()) {
23
+ result.append(charStack.pop())
24
+ }
25
+ result.reverse()
26
+ return when (result.length) {
27
+ 1 -> result.toString()
28
+ else -> {
29
+ while (result.length > 1 && result[0 ] == ' 0' ) {
30
+ result.deleteCharAt(0 )
31
+ }
32
+ result.toString()
33
+ }
34
+ }
35
+ }
36
+ /*
37
+ fun removeKdigits(num: String, k: Int): String {
38
+ if (num.length == k) {
39
+ return "0"
40
+ }
41
+ val result = StringBuilder(num)
42
+ for (i in 1..k) {
43
+ var index = 0
44
+ while (index < result.length - 1 && result[index] <= result[index + 1]) {
45
+ index++
46
+ }
47
+ result.deleteCharAt(index)
48
+ }
49
+ return when (result.length) {
50
+ 1 -> result.toString()
51
+ else -> {
52
+ while (result.length > 1 && result[0] == '0') {
53
+ result.deleteCharAt(0)
54
+ }
55
+ result.toString()
56
+ }
57
+ }
58
+ }
59
+ */
60
+ /*
61
+ !! wrong !!
62
+ private fun recursion(
63
+ num: String,
64
+ result: IntArray,
65
+ start: Int,
66
+ stringBuilder: StringBuilder,
67
+ remain: Int
68
+ ) {
69
+ if (remain == 0) {
70
+ val currentInt = stringBuilder.toString().toInt()
71
+ if (currentInt < result[0]) {
72
+ result[0] = currentInt
73
+ }
74
+ } else {
75
+ for (index in start until num.length) {
76
+ recursion(num, result, index + 1, stringBuilder.append(num[index]), remain - 1)
77
+ stringBuilder.deleteCharAt(stringBuilder.length - 1)
78
+ }
79
+ }
80
+ }
81
+ */
82
+ /*
83
+ !! wrong !!
84
+ private fun getIntAfterRemoveRange(nums: String, start: Int, end: Int): Int {
85
+ val resultString = "${nums.substring(0, start)}${nums.substring(end, nums.length)}"
86
+ return when {
87
+ resultString.isEmpty() -> 0
88
+ else -> resultString.toInt()
89
+ }
90
+ */
91
+ }
92
+
93
+ fun main () {
94
+ val solution = RemoveKDigitsKotlin402 ()
95
+ println (solution.removeKdigits(" 5337" , 2 )) // 33
96
+ println (solution.removeKdigits(" 1432219" , 3 )) // 1219
97
+ println (solution.removeKdigits(" 53037" , 4 )) // 0
98
+ println (solution.removeKdigits(" 530137" , 4 )) // 0
99
+ }
0 commit comments