前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】T176-移掉K位数字

【leetcode刷题】T176-移掉K位数字

作者头像
木又AI帮
发布2019-10-10 11:54:15
5230
发布2019-10-10 11:54:15
举报
文章被收录于专栏:木又AI帮木又AI帮

木又连续日更第15天(15/100)


木又的第176篇leetcode解题报告

贪心类型第5篇解题报告

leetcode第62题:移掉K位数字

https://leetcode-cn.com/problems/remove-k-digits


【题目】

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。

代码语言:javascript
复制
示例 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。

【思路】

使用一个栈,栈底元素到栈顶元素从小到大,遍历字符串时,如果字符小于栈顶元素,则直接弹出栈顶元素。遍历结束后,如果删除元素的个数小于k,则继续删除足够数量的栈顶元素。

【代码】

python版本

代码语言:javascript
复制
class Solution(object):
    def removeKdigits(self, num, k):
        """
        :type num: str
        :type k: int
        :rtype: str
        """
        if k >= len(num):
            return '0'
        stack = []
        for i, n in enumerate(num):
            if k == 0:
                stack.append(num[i:])
                break
            if len(stack) == 0 or n >= stack[-1]:
                stack.append(n)
            else:
                while len(stack) > 0 and n < stack[-1]:
                    stack.pop(-1)
                    k -= 1
                    if k == 0:
                        break
                stack.append(num[i])

        while k != 0:
            stack.pop(-1)
            k -= 1
        res = ''.join(stack).lstrip('0')
        if res == '':
            res = '0'
        return res
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档