【Leetcode刷题Python】402. 移掉 K 位数字

1 题目

给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。

2 解析

(1)从左开始遍历num
(2)如果当前值都大于左边和右边的元素,就删除当前元素
(3)如果当前元素小于左边元素,就删除左边元素。
(4)用栈来记录左边的元素

3 Python实现

class Solution:
    def removeKdigits(self, num: str, k: int) -> str:
        stack = []
        remain = len(num) - k
        # 如果提出的长度和字符串长度一样,一定返回是0
        if len(num)==k:
            return '0'
        for n in num:
            # 栈顶元素大,就删除栈顶,直到k为0
            while k and stack and n <stack[-1]:
                stack.pop()
                k-=1
            stack.append(n)
        return str(int(''.join([str(v) for v in stack])[:remain]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Better Bench

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值