移掉 k 位数字——贪心+单调栈

79 阅读1分钟

image.png

代码 1 贪心:

  1. stack 维护单调递增栈,但维护的次数仅限 k 次,
  2. for 循环结束后,如果 k 还不为 0 ,则直接从队尾截掉 k 个元素即可
  3. 最后把左边的 0 给去掉
  4. 且处理一个特殊情况,即 ans 为空
func removeKdigits(num string, k int) string {
    stack := []byte{}
    for i := range num {
        digit := num[i]
        for k > 0 && len(stack) > 0 && digit < stack[len(stack)-1] {
            stack = stack[:len(stack)-1]
            k--
        }
        stack = append(stack, digit)
    }
    stack = stack[:len(stack)-k]
    ans := strings.TrimLeft(string(stack), "0")
    if ans == "" {
        ans = "0"
    }
    return ans
}