Given string num representing a non-negative integer num, and an integer k, return the smallest possible integer after removingkdigits fromnum.
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 1: Greedy Algorithm
Thinking
After deleting \(k\) digits we want the smallest remaining number. Equal-length integers are compared from the first differing digit, so larger digits on the left should be removed first.
A non-decreasing stack from left to right pops the top whenever the current digit is smaller, spending one deletion. Then keep the leftover length and strip leading zeros.
The scan has to go left to right: a smaller digit can occupy a higher place only after a larger left digit is gone.