描述
给定一个以字符串表示的非负整数 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相关推荐

  1. LeetCode 402. 移掉K位数字 中等难度

    402. 移掉K位数字 题目: 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导 ...

  2. Java实现 LeetCode 402 移掉K位数字

    402. 移掉K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示 ...

  3. leetcode 402. 移掉K位数字(贪心算法)

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  4. LeetCode 402. 移掉K位数字(贪心,单调栈)

    1. 题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : ...

  5. 贪心---移掉K位数字

    题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: ...

  6. C++算法学习(力扣:402. 移掉K位数字)

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  7. LeetCode 402:移掉K位数字--JAVA

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  8. 402. 移掉K位数字(单调栈)

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  9. leetcode402. 移掉K位数字

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

最新文章

  1. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
  2. Opportunity的chance of success determination逻辑
  3. html5离线储存不足,html5的离线存储问题
  4. 海兰一体计算机参数,海兰幽灵X7电竞一体机怎么样-海兰幽灵X7电竞一体机评测...
  5. 微信上如何发送GIF动图
  6. script标签的使用,从零开始
  7. 【记录】帮同学做的一个函数拟合
  8. js系列之每天一练成长录之一
  9. 最全的世界地图矢量素材下载(AI、EPS、SVG格式)
  10. UG软件制图的几个重要技巧,你知道吗?
  11. 解决征信中心密码控件无法安装
  12. 分享两种证件照换背景方法,轻松把照片底色变白
  13. 克服J2SE 1.3 ~ 1.4不兼容问题
  14. OpenHarmony 3.2 Release HDF的IDL文件初探(上)
  15. 史上最全!作为一名Java面试者你应该知道的
  16. 微信H5域名被屏蔽被拦截的最新解决方案(微信域名防投诉)
  17. bzoj3167[HEOI2013]SAO
  18. 谁说码农不懂浪漫?js写的'老婆生日快乐'特效
  19. 扁平化设计与思维导图
  20. Speedoffice(excel)如何制作斜线表头

热门文章

  1. ActiveRecordException: The model attribute ysgl is not exists.
  2. LeetCode 4 寻找两个正序数组的中位数
  3. Vue——[Props with type Object/Array must use a factory function to return the default value.]解决方案
  4. BugKuCTF 杂项 闪的好快
  5. 2019牛客暑期多校训练营(第六场)
  6. mysql常用备份指令
  7. docker piwik
  8. as3通信AMF3协议的框架
  9. 完全卸载ORACLE9i
  10. 分支界限算法【0-1背包问题】按照优先队列式(LC)分支限界法求解0-1背包问题, 并给出限界函数,并画出该实例的状态空间树。