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.
移掉 K 位数字。
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
/** * @param {string} num * @param {number} k * @return {string} */ var removeKdigits = function(num, k) { // corner case if (num === null || num.length === 0) { return'0'; }
// normal case let stack = []; for (let i = 0; i < num.length; i++) { while (k > 0 && stack.length && num.charAt(i) < stack[stack.length - 1]) { stack.pop(); k--; } stack.push(num.charAt(i)); }
while (k > 0) { stack.pop(); k--; }
let sb = stack.join(''); let res = 0; while (res < sb.length && sb.charAt(res) === '0') { res++; } return res === sb.length ? '0' : sb.substring(res); };