由于越靠前的数字的位数越高,所以想获得最小的数字那么肯定是递增的,所以维持一个单调递增的栈
不符合递增特性的删除。最后取栈里面前所需长度的字符串并去除前导零
def removeKdigits(self, num, k):
"""
:type num: str
:type k: int
:rtype: str
"""
stack = []
l = len(num) - k
for i in num:
while k and stack and i < stack[-1]:
stack.pop()
k -= 1
stack.append(i)
return ''.join(stack[:l]).lstrip('0') or '0'
def removeKdigits(self, num, k):
"""
:type num: str
:type k: int
:rtype: str
"""
stack = []
for i in range(len(num)):
while stack and int(num[i]) < stack[-1]:
stack.pop()
k -= 1
if k == 0:
return str(int("".join(list(map(str, stack))) + num[i:]))
stack.append(int(num[i]))
while k > 0 and stack:
k -= 1
stack.pop()
return str(int("".join(list(map(str, stack))))) if stack else "0"