LeetCode 402. 移掉 K 位数字
题目描述
思路分析
单调递增栈
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
func removeKdigits(num string, k int) string {
var stack []byte
for i := 0; i < len(num); i++ {
// 当栈不为空,且当前数字小于栈顶数字,并且还有可以移除的数字
for k > 0 && len(stack) > 0 && stack[len(stack)-1] > num[i] {
stack = stack[:len(stack)-1] // 弹出栈顶元素
k--
}
stack = append(stack, num[i]) // 将当前数字推入栈中
}
// 如果还有剩余的 k,移除栈末尾的元素
for k > 0 {
stack = stack[:len(stack)-1]
k--
}
// 将栈中的数字拼接成字符串
res := string(stack)
// 去掉前导零
for len(res) > 0 && res[0] == '0' {
res = res[1:]
}
// 如果结果为空,返回 "0"
if res == "" {
return "0"
}
return res
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
func removeKdigits(num string, k int) string {
var stack []byte
for i := 0; i < len(num); i++ {
// 若当前数字比栈顶数字小,移除栈顶元素
for k > 0 && len(stack) > 0 && stack[len(stack)-1] > num[i] {
stack = stack[:len(stack)-1]
k--
}
stack = append(stack, num[i])
}
// 如果还有需要移除的数字
for k > 0 {
stack = stack[:len(stack)-1]
k--
}
// 移除前导零
res := string(stack)
i := 0
for i < len(res) && res[i] == '0' {
i++
}
res = res[i:]
if len(res) <= 0 {
return "0"
}
return res
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用