-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRemoveKDigits.java
More file actions
51 lines (50 loc) · 1.38 KB
/
RemoveKDigits.java
File metadata and controls
51 lines (50 loc) · 1.38 KB
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package medium;
import java.util.LinkedList;
/**
* ClassName: RemoveKDigits.java
* Author: chenyiAlone
* Create Time: 2019/5/25 14:12
* Description: No.402
* 思路:
* 1. 删除的位数是固定的,也就是剩下的位数是固定的
* 2. 只要前面的数比后面的小,那这个结果一定小
* eg:
* 123456, k = 2; => 从最后开始删除
* 1234
*
* 102435, k = 2; => 维持一个增序
* 0235
*
*
*
* 删除的位数是固定的,也就是剩下的位数是固定的
* 只要前面的数比后面的小,那这个结果一定小
* 123456, k = 2; => 从最后开始删除
* 1234
*
* 102435, k = 2; => 维持一个增序
* 0235
*
*
*/
public class RemoveKDigits {
public String removeKdigits(String num, int k) {
LinkedList<Integer> stack = new LinkedList<>();
for (char c : num.toCharArray()) {
int i = c - '0';
while (!stack.isEmpty() && stack.peek() > i && k != 0) {
stack.pop();
k --;
}
stack.push(i);
}
while (k-- != 0)
stack.pop();
while (stack.size() > 1 && stack.peekLast() == 0)
stack.pollLast();
StringBuilder res = new StringBuilder();
while (!stack.isEmpty())
res.append(stack.pollLast());
return res.length() == 0 ? "0" : res.toString();
}
}