给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。python
注意:git
- num 的长度小于 10002 且 ≥ k。
- num 不会包含任何前导零。
示例 1 :数组
输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 造成一个新的最小的数字 1219。示例 2 :app
输入: num = "10200", k = 1 输出: "200" 解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。示例 3 :code
输入: num = "10", k = 2 输出: "0" 解释: 从原数字移除全部的数字,剩余为空就是0。
class Solution(object): def removeKdigits(self, num, k): """ :type num: str :type k: int :rtype: str 刚开始的时候,觉得这道题,就是讲一串字符串中的数字比较大的k个数去掉便可,可是发现,去掉K个 比较大的数,并不能保证,剩余的数组成的是最小的数。就好比示例了中 num = ‘1432219’ k = 3 若是去掉最大的三个数, 9,4,3 剩余的是 1221 没有去掉 4,3,2 剩余的是 1219小 因此,这道题不能依据去掉最大的数来考虑。 """ if len(num) > 10002 or len(num) <k: return False if len(num) == k: return '0' stack = [] # 先移除左边比右边大的数 for i in num: while stack and i < stack[-1] and k>0: stack.pop() k-=1 stack.append(i) #若是左边没有比右边的大,那就本身从最后移除 if k>0: stack = stack[:-k] #前面有0 去掉0 while stack and stack[0] =='0': stack.pop(0) #若是stack里面没有值,返回0, 若是有就将stack转换为str返回 if not stack: return "0" else: return ''.join(stack)
成功内存
显示详情 leetcode
执行用时: 52 ms, 在Remove K Digits的Python提交中击败了68.97% 的用户rem
内存消耗: 10.9 MB, 在Remove K Digits的Python提交中击败了0.00% 的用户字符串