Skip to content

Commit 32373ff

Browse files
add kotlin/java solution for 402 Remove-K-Digits
1 parent 0671c11 commit 32373ff

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import java.util.Stack;
2+
3+
public class RemoveKDigits402 {
4+
public String removeKdigits(final String num, final int k) {
5+
if (num.length() == k) {
6+
return "0";
7+
}
8+
int currentK = k;
9+
Stack<Character> characterStack = new Stack<>();
10+
for (int index = 0; index < num.length(); index++) {
11+
final Character c = num.charAt(index);
12+
while (currentK > 0 && !characterStack.empty() && characterStack.peek() > c) {
13+
characterStack.pop();
14+
--currentK;
15+
}
16+
characterStack.push(c);
17+
}
18+
while (currentK > 0) {
19+
characterStack.pop();
20+
--currentK;
21+
}
22+
final StringBuilder result = new StringBuilder();
23+
while (!characterStack.isEmpty()) {
24+
result.append(characterStack.pop());
25+
}
26+
result.reverse();
27+
if (result.length() == 1) {
28+
return result.toString();
29+
}
30+
while (result.length() > 1 && result.charAt(0) == '0') {
31+
result.deleteCharAt(0);
32+
}
33+
return result.toString();
34+
}
35+
/*
36+
public String removeKdigits(String num, int k) {
37+
if (num.length() == k) {
38+
return "0";
39+
}
40+
final StringBuilder result = new StringBuilder(num);
41+
42+
for (int time = 1; time <= k; time++) {
43+
int index = 0;
44+
while (index < result.length() - 1 &&
45+
result.charAt(index) <= result.charAt(index + 1)) {
46+
++index;
47+
}
48+
result.deleteCharAt(index);
49+
}
50+
51+
if (result.length() == 1) {
52+
return result.toString();
53+
}
54+
while (result.length() > 1 && result.charAt(0) == '0') {
55+
result.deleteCharAt(0);
56+
}
57+
return result.toString();
58+
}
59+
*/
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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

Comments
 (0)