Skip to content

Commit c1002e3

Browse files
committed
feat: add solutions to lc problem: No.0402
No.0402.Remove K Digits
1 parent 9aa7b05 commit c1002e3

File tree

6 files changed

+191
-66
lines changed

6 files changed

+191
-66
lines changed

solution/0400-0499/0402.Remove K Digits/README.md

+70-18
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,86 @@
6969
```python
7070
class Solution:
7171
def removeKdigits(self, num: str, k: int) -> str:
72-
stack, remain = [], len(num)-k
73-
for value in num:
74-
while k and stack and stack[-1] > value:
75-
k = k-1
76-
stack.pop()
77-
stack.append(value)
78-
return "".join(stack[:remain]).lstrip('0') or '0'
72+
stk = []
73+
remain = len(num) - k
74+
for c in num:
75+
while k and stk and stk[-1] > c:
76+
stk.pop()
77+
k -= 1
78+
stk.append(c)
79+
return ''.join(stk[:remain]).lstrip('0') or '0'
7980
```
8081

81-
### **Go**
82+
### **Java**
83+
84+
```java
85+
class Solution {
86+
public String removeKdigits(String num, int k) {
87+
StringBuilder stk = new StringBuilder();
88+
for (char c : num.toCharArray()) {
89+
while (k > 0 && stk.length() > 0 && stk.charAt(stk.length() - 1) > c) {
90+
stk.deleteCharAt(stk.length() - 1);
91+
--k;
92+
}
93+
stk.append(c);
94+
}
95+
for (; k > 0; --k) {
96+
stk.deleteCharAt(stk.length() - 1);
97+
}
98+
int i = 0;
99+
for (; i < stk.length() && stk.charAt(i) == '0'; ++i) {
82100

83-
<!-- 这里可写当前语言的特殊实现逻辑 -->
101+
}
102+
String ans = stk.substring(i);
103+
return "".equals(ans) ? "0" : ans;
104+
}
105+
}
106+
```
107+
108+
### **C++**
109+
110+
```cpp
111+
class Solution {
112+
public:
113+
string removeKdigits(string num, int k) {
114+
string stk;
115+
for (char& c : num) {
116+
while (k && stk.size() && stk.back() > c) {
117+
stk.pop_back();
118+
--k;
119+
}
120+
stk += c;
121+
}
122+
while (k--) {
123+
stk.pop_back();
124+
}
125+
int i = 0;
126+
for (; i < stk.size() && stk[i] == '0'; ++i) {
127+
128+
}
129+
string ans = stk.substr(i);
130+
return ans == "" ? "0" : ans;
131+
}
132+
};
133+
```
134+
135+
### **Go**
84136

85137
```go
86138
func removeKdigits(num string, k int) string {
87-
stack, remain := make([]byte, 0), len(num)-k
139+
stk, remain := make([]byte, 0), len(num)-k
88140
for i := 0; i < len(num); i++ {
89-
n := len(stack)
90-
for k > 0 && n > 0 && stack[n-1] > num[i] {
91-
stack = stack[:n-1]
141+
n := len(stk)
142+
for k > 0 && n > 0 && stk[n-1] > num[i] {
143+
stk = stk[:n-1]
92144
n, k = n-1, k-1
93145
}
94-
stack = append(stack, num[i])
146+
stk = append(stk, num[i])
95147
}
96-
// 返回删除 k 个字符之后的字符串,需要去除可能存在的前置 0
97-
for i := 0; i < len(stack) && i < remain; i++ {
98-
if stack[i] != '0' {
99-
return string(stack[i:remain])
148+
149+
for i := 0; i < len(stk) && i < remain; i++ {
150+
if stk[i] != '0' {
151+
return string(stk[i:remain])
100152
}
101153
}
102154
return "0"

solution/0400-0499/0402.Remove K Digits/README_EN.md

+69-15
Original file line numberDiff line numberDiff line change
@@ -51,32 +51,86 @@
5151
```python
5252
class Solution:
5353
def removeKdigits(self, num: str, k: int) -> str:
54-
stack, remain = [], len(num)-k
55-
for value in num:
56-
while k and stack and stack[-1] > value:
57-
k = k-1
58-
stack.pop()
59-
stack.append(value)
60-
return "".join(stack[:remain]).lstrip('0') or '0'
54+
stk = []
55+
remain = len(num) - k
56+
for c in num:
57+
while k and stk and stk[-1] > c:
58+
stk.pop()
59+
k -= 1
60+
stk.append(c)
61+
return ''.join(stk[:remain]).lstrip('0') or '0'
62+
```
63+
64+
### **Java**
65+
66+
```java
67+
class Solution {
68+
public String removeKdigits(String num, int k) {
69+
StringBuilder stk = new StringBuilder();
70+
for (char c : num.toCharArray()) {
71+
while (k > 0 && stk.length() > 0 && stk.charAt(stk.length() - 1) > c) {
72+
stk.deleteCharAt(stk.length() - 1);
73+
--k;
74+
}
75+
stk.append(c);
76+
}
77+
for (; k > 0; --k) {
78+
stk.deleteCharAt(stk.length() - 1);
79+
}
80+
int i = 0;
81+
for (; i < stk.length() && stk.charAt(i) == '0'; ++i) {
82+
83+
}
84+
String ans = stk.substring(i);
85+
return "".equals(ans) ? "0" : ans;
86+
}
87+
}
88+
```
89+
90+
### **C++**
91+
92+
```cpp
93+
class Solution {
94+
public:
95+
string removeKdigits(string num, int k) {
96+
string stk;
97+
for (char& c : num) {
98+
while (k && stk.size() && stk.back() > c) {
99+
stk.pop_back();
100+
--k;
101+
}
102+
stk += c;
103+
}
104+
while (k--) {
105+
stk.pop_back();
106+
}
107+
int i = 0;
108+
for (; i < stk.size() && stk[i] == '0'; ++i) {
109+
110+
}
111+
string ans = stk.substr(i);
112+
return ans == "" ? "0" : ans;
113+
}
114+
};
61115
```
62116

63117
### **Go**
64118

65119
```go
66120
func removeKdigits(num string, k int) string {
67-
stack, remain := make([]byte, 0), len(num)-k
121+
stk, remain := make([]byte, 0), len(num)-k
68122
for i := 0; i < len(num); i++ {
69-
n := len(stack)
70-
for k > 0 && n > 0 && stack[n-1] > num[i] {
71-
stack = stack[:n-1]
123+
n := len(stk)
124+
for k > 0 && n > 0 && stk[n-1] > num[i] {
125+
stk = stk[:n-1]
72126
n, k = n-1, k-1
73127
}
74-
stack = append(stack, num[i])
128+
stk = append(stk, num[i])
75129
}
76130

77-
for i := 0; i < len(stack) && i < remain; i++ {
78-
if stack[i] != '0' {
79-
return string(stack[i:remain])
131+
for i := 0; i < len(stk) && i < remain; i++ {
132+
if stk[i] != '0' {
133+
return string(stk[i:remain])
80134
}
81135
}
82136
return "0"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
string removeKdigits(string num, int k) {
4+
string stk;
5+
for (char& c : num) {
6+
while (k && stk.size() && stk.back() > c) {
7+
stk.pop_back();
8+
--k;
9+
}
10+
stk += c;
11+
}
12+
while (k--) {
13+
stk.pop_back();
14+
}
15+
int i = 0;
16+
for (; i < stk.size() && stk[i] == '0'; ++i) {
17+
18+
}
19+
string ans = stk.substr(i);
20+
return ans == "" ? "0" : ans;
21+
}
22+
};

solution/0400-0499/0402.Remove K Digits/Solution.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
func removeKdigits(num string, k int) string {
2-
stack, remain := make([]byte, 0), len(num)-k
2+
stk, remain := make([]byte, 0), len(num)-k
33
for i := 0; i < len(num); i++ {
4-
n := len(stack)
5-
for k > 0 && n > 0 && stack[n-1] > num[i] {
6-
stack = stack[:n-1]
4+
n := len(stk)
5+
for k > 0 && n > 0 && stk[n-1] > num[i] {
6+
stk = stk[:n-1]
77
n, k = n-1, k-1
88
}
9-
stack = append(stack, num[i])
9+
stk = append(stk, num[i])
1010
}
11-
// 返回删除 k 个字符之后的字符串,需要去除可能存在的前置 0
12-
for i := 0; i < len(stack) && i < remain; i++ {
13-
if stack[i] != '0' {
14-
return string(stack[i:remain])
11+
12+
for i := 0; i < len(stk) && i < remain; i++ {
13+
if stk[i] != '0' {
14+
return string(stk[i:remain])
1515
}
1616
}
1717
return "0"
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
class Solution {
22
public String removeKdigits(String num, int k) {
3-
if (k <= 0) {
4-
return num;
5-
}
6-
if (num.length() <= k) {
7-
return "0";
8-
}
9-
int len = num.length() - k;
10-
char[] cs = new char[num.length()];
11-
int top = -1;
3+
StringBuilder stk = new StringBuilder();
124
for (char c : num.toCharArray()) {
13-
while (top >= 0 && cs[top] > c && k > 0) {
14-
--top;
5+
while (k > 0 && stk.length() > 0 && stk.charAt(stk.length() - 1) > c) {
6+
stk.deleteCharAt(stk.length() - 1);
157
--k;
168
}
17-
cs[++top] = c;
9+
stk.append(c);
10+
}
11+
for (; k > 0; --k) {
12+
stk.deleteCharAt(stk.length() - 1);
1813
}
19-
int offset = 0;
20-
while (offset <= top && cs[offset] == '0') {
21-
++offset;
14+
int i = 0;
15+
for (; i < stk.length() && stk.charAt(i) == '0'; ++i) {
16+
2217
}
23-
return offset > top ? "0" : new String(cs, offset, len - offset);
18+
String ans = stk.substring(i);
19+
return "".equals(ans) ? "0" : ans;
2420
}
25-
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
class Solution:
22
def removeKdigits(self, num: str, k: int) -> str:
3-
stack, remain = [], len(num) - k
4-
for value in num:
5-
while k and stack and stack[-1] > value:
6-
k = k - 1
7-
stack.pop()
8-
stack.append(value)
9-
return "".join(stack[:remain]).lstrip('0') or '0'
3+
stk = []
4+
remain = len(num) - k
5+
for c in num:
6+
while k and stk and stk[-1] > c:
7+
stk.pop()
8+
k -= 1
9+
stk.append(c)
10+
return ''.join(stk[:remain]).lstrip('0') or '0'

0 commit comments

Comments
 (0)