题目链接:https://leetcode-cn.com/problems/remove-k-digits/
难度:中等

描述:
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。

提示:
1 <= k <= len(num) <= 100000
除非num == "0"num不含前导"0"

题解

从前往后遍历,我们应该尽可能保留较小的数组,放弃较大的数字

  1. class Solution(object):
  2. def removeKdigits(self, num, k):
  3. stack = []
  4. ret_len = len(num) - k
  5. for digit in num:
  6. while k and stack and stack[-1] > digit:
  7. stack.pop()
  8. k -= 1
  9. stack.append(digit)
  10. # 防止k > 0及没有剩下数字
  11. return ''.join(stack[:ret_len]).lstrip('0') or '0'