402. Remove K Digits
2026/1/12大约 1 分钟约 327 字
402. Remove K Digits
难度: Medium
题目描述
Given string num representing a non-negative integer num, and an integer k, return the smallest possible integer after removing k digits from num.
Example 1:
Input: num = "1432219", k = 3 Output: "1219" Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.
Example 2:
Input: num = "10200", k = 1 Output: "200" Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.
Example 3:
Input: num = "10", k = 2 Output: "0" Explanation: Remove all the digits from the number and it is left with nothing which is 0.
Constraints:
1 <= k <= num.length <= 105numconsists of only digits.numdoes not have any leading zeros except for the zero itself.
解题思路
代码实现
解决方案
java
class Solution {
public String removeKdigits(String num, int k) {
if (num.length() <= k) {
return "0";
}
LinkedList<Character> stack = new LinkedList<>();
char[] charArray = num.toCharArray();
int kTemp = k;
for (char c : charArray) {
if (stack.isEmpty()) {
stack.push(c);
continue;
}
while (!stack.isEmpty() && k > 0 && stack.peek() > c) {
stack.pop();
k--;
}
stack.push(c);
}
while(k!=0){
stack.pop();
k--;
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
while (sb.length() > 0 && sb.lastIndexOf("0") == sb.length() - 1) {
sb.deleteCharAt(sb.length() - 1);
}
if (sb.length() == 0) {
return "0";
}
return sb.reverse().toString();
}
}