LeetCode移掉k位数字(贪心算法)python
描述
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
num的长度小于10002,且将≥k。给定的num不包含任何前导零。
您在真实的面试中是否遇到过这个题?
样例
Example 1:
Input: num = “1432219”, k = 3
Output: “1219”
Example 2:
Input: num = “10200”, k = 1
Output: “200”
说明:去掉4、3、2三个数字,形成最小的新数字1219。
Example 3:
Input: num = “10”, k = 2
Output: “0”
num的长度小于k
思路:
官方思路:
给定一个数字序列如526 ,如果要求我们只删除一个数字,那么从左到右,我们有5,2,6三个选择,我们将每一个数字和它的左边进行比较,从2开始,小于它的左边5,我们应删除5。
这个定义我们的贪心规则,每个数字都如此。直到满足一些条件 结束:如 保存的数字为空,或者已经删除啦k位数字。
注意一些特殊情况:
(1)单调递增数据,贪心规则不好使,直接删除数据最后k位,然后返回。
(2)k==0,返回原数据。
(3)在贪心规则里删除的数字小于k位,如删除了A位,我们需要在贪心外删除原始数据最后的k-A 位。
代码:
class Solution:def removeKdigits(self, num: str, k: int) -> str:numStack = []# 构造一个单调递增的数字序列for digit in num:while k and numStack and numStack[-1] > digit:numStack.pop()k -= 1numStack.append(digit)# 递增情况 将最后剩下的K位Trunk:返回整个列表#在while 循环里删除数字小于k位 如m位,将while后面得到的数据 直接删除最后k-m位,注意此时代码里的k=k-m。因为已经在while k减去了m#在K ==0的情况下 返回原始数据numStackfinalStack = numStack[:-k] if k else numStack# 把前导零串起来return "".join(finalStack).lstrip('0') or "0"
C=Solution()
d=C.removeKdigits("1432219",k=3)
print(d)
结果:1219
LeetCode移掉k位数字(贪心算法)python相关推荐
- LeetCode 402. 移掉K位数字 中等难度
402. 移掉K位数字 题目: 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导 ...
- Java实现 LeetCode 402 移掉K位数字
402. 移掉K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示 ...
- leetcode 402. 移掉K位数字(贪心算法)
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...
- LeetCode 402. 移掉K位数字(贪心,单调栈)
1. 题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : ...
- 贪心---移掉K位数字
题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: ...
- C++算法学习(力扣:402. 移掉K位数字)
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...
- LeetCode 402:移掉K位数字--JAVA
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...
- 402. 移掉K位数字(单调栈)
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...
- leetcode402. 移掉K位数字
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...
最新文章
- mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
- Opportunity的chance of success determination逻辑
- html5离线储存不足,html5的离线存储问题
- 海兰一体计算机参数,海兰幽灵X7电竞一体机怎么样-海兰幽灵X7电竞一体机评测...
- 微信上如何发送GIF动图
- script标签的使用,从零开始
- 【记录】帮同学做的一个函数拟合
- js系列之每天一练成长录之一
- 最全的世界地图矢量素材下载(AI、EPS、SVG格式)
- UG软件制图的几个重要技巧,你知道吗?
- 解决征信中心密码控件无法安装
- 分享两种证件照换背景方法,轻松把照片底色变白
- 克服J2SE 1.3 ~ 1.4不兼容问题
- OpenHarmony 3.2 Release HDF的IDL文件初探(上)
- 史上最全!作为一名Java面试者你应该知道的
- 微信H5域名被屏蔽被拦截的最新解决方案(微信域名防投诉)
- bzoj3167[HEOI2013]SAO
- 谁说码农不懂浪漫?js写的'老婆生日快乐'特效
- 扁平化设计与思维导图
- Speedoffice(excel)如何制作斜线表头
热门文章
- ActiveRecordException: The model attribute ysgl is not exists.
- LeetCode 4 寻找两个正序数组的中位数
- Vue——[Props with type Object/Array must use a factory function to return the default value.]解决方案
- BugKuCTF 杂项 闪的好快
- 2019牛客暑期多校训练营(第六场)
- mysql常用备份指令
- docker piwik
- as3通信AMF3协议的框架
- 完全卸载ORACLE9i
- 分支界限算法【0-1背包问题】按照优先队列式(LC)分支限界法求解0-1背包问题, 并给出限界函数,并画出该实例的状态空间树。