首页 > 其他分享 >402. 移掉 K 位数字

402. 移掉 K 位数字

时间:2023-03-21 20:12:47浏览次数:33  
标签:数字 st num 402 ans 移掉 单调

题目描述

给了一个字符串百奥是的非负整数num和整数k,问怎么移除其中的k个数字,让剩下的数字最小?

f1-单调栈

基本分析

  1. 怎样的数字是最小的?单调递增排序的
  2. 带有约束k怎么考虑?只要栈非空+栈顶>d+ 还有k就能一直删
  3. k没用完怎么办?字符是单调增的,从后往前删k次(k被维护过)
  4. 结果怎么得到?栈中元素合成字符串,注意前导0和""情况

代码

class Solution:
    def removeKdigits(self, num: str, k: int) -> str:
        st = []
        for i, d in enumerate(num):
            while st and k and st[-1] > d:
                st.pop()
                k -= 1
            st.append(d)

        for _ in range(k):
            if st:
                st.pop()
        # 注意k没用完的情况
        ans = "".join(st).lstrip('0')
        if ans != "":
            return ans
        else:
            return "0"

总结

  1. 这里的栈放的就是最终的结果,是非严格递增,到了删除的情况时,如果k允许就删,删够了后面就无脑加。头部比屁股重要。

标签:数字,st,num,402,ans,移掉,单调
From: https://www.cnblogs.com/zk-icewall/p/17241260.html

相关文章