402. Remove K Digits
Description
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 <= 105
num
consists of only digits.num
does not have any leading zeros except for the zero itself.
Solutions
Solution: Stack
- Time complexity: O(n)
- Space complexity: O(n)
JavaScript
js
/**
* @param {string} num
* @param {number} k
* @return {string}
*/
const removeKdigits = function (num, k) {
const stack = [];
for (const digit of num) {
while (k && stack.length && stack.at(-1) > digit) {
stack.pop();
k -= 1;
}
if (!stack.length && digit === '0') continue;
stack.push(digit);
}
return stack.slice(0, stack.length - k).join('') || '0';
};