Skip to content

Latest commit

 

History

History
42 lines (33 loc) · 1.21 KB

0402-移掉K位数字.md

File metadata and controls

42 lines (33 loc) · 1.21 KB

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

注意:

num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 :

输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。 示例 2 :

输入: num = "10200", k = 1 输出: "200" 解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。 示例 3 :

输入: num = "10", k = 2 输出: "0" 解释: 从原数字移除所有的数字,剩余为空就是0。

var removeKdigits = function(num, k) {
  const stack = []
  const remain = num.length - k
  for (let i = 0; i < num.length; i++) {
    while(k > 0 && stack.length && stack[stack.length - 1] > num[i]) {
      stack.pop()
      k--
    }
    if (num[i] !== '0' || stack.length > 0) {
      stack.push(num[i])
    }
  }
  return stack.slice(0, remain).length === 0 ? '0' : stack.slice(0, remain).join('')
};

解题思路: 本题用栈解答,当要入栈的元素比栈顶元素小时,弹出栈顶元素,k--,注意一些刁钻的corner case即可,例如0,以及循环一次后k依旧大于0如何处理。