题目:
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k **位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
算法:
如果a < b则123a456 < 123b456 。因此可以遍历num,将遍历的数据保存到stack中,遍历比较nums[i]和stack 栈顶元素的大小,决定是否出栈,
func removeKdigits(num string, k int) string {
stack := make([]byte, 0)
for i := range num {
// stack末尾元素小于num[i],丢弃stack的末尾元素
for k > 0 && len(stack) > 0 && stack[len(stack) - 1] > num[i] {
stack = stack[:len(stack) - 1]
k --
}
stack = append(stack, num[i])
}
stack = stack[:len(stack) - k]
// 去除前导0
start := 0
for start < len(stack) {
if stack[start] != '0' {
break
}
start ++
}
stack = stack[start:]
if len(stack) == 0 {
return "0"
}
return string(stack)
}