当前位置: 首页 > 后端技术 > Python

LeetCode402.RemoveKDigits

时间:2023-03-26 13:52:26 Python

描述给定一个以字符串表示的非负整数num,从数字中删除k位,使得新数字尽可能小。注意:num的长度小于10002,将是≥k.Thegivennumdoesnotcontainanyleadingzero.Example1:Input:num="1432219",k=3Output:"1219"Explanation:删除三个数字4,3,2组成新数字1219是最小的。例2:输入:num="10200",k=1输出:"200"解释:去掉前导1,数字为200。注意输出不能有前导零。例3:输入:num="10",k=2Output:"0"Explanation:从数字中删除所有数字,剩下的就是零。描述给定一个由字符串表示的非负整数num,删除该数字k-的位数,使剩下的数最小。注意:num的长度小于10002且≥k。num将不包含任何前导零。示例1:输入:num="1432219",k=3输出:"1219"解释:删除三个数字4、3和2以组成新的最小数字1219。示例2:输入:num="10200",k=1输出:"200"解释:去掉第一个1,剩下的数是200。注意输出不能有任何前导零。示例3:输入:num="10",k=2输出:"0"解释:将原数中的所有数去掉,剩下的空为0来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode网络所有。商业转载请联系官方授权,非商业转载请注明出处。这个想法是使用堆栈。需要指出的是,在字符形式中,仍然存在“1”<“2”……<“9”的情况。我们依次将数字(字符格式)压入栈中;每次我们push的时候都会和栈顶的数进行比较。如果栈顶的数比较大,就把栈顶的数出栈(循环校验),直到要入栈的数小于等于栈顶的数堆;统计从栈中弹出的数字的个数cnt,如果cnt超过给定的k;不做比较,直接入栈;如果当前要入栈的次数为“0”,且栈为空,则跳过该次数,不入栈;#-*-编码:utf-8-*-#@作者:何睿#@创建日期:2019-09-0707:59:40#@最后修改者:何睿#@最后修改时间:2019-09-0709:10:06class解决方案:defremoveKdigits(self,num:str,k:int)->str:cnt,stack=0,[]forninnum:whilecnt