华为OD-移掉K位数字

这篇具有很好参考价值的文章主要介绍了华为OD-移掉K位数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

给定一个以字符串表示的数字 num 和一个数字 k ,从 num 中移除 k 位数字,使得剩下的数字最小。如果可以删除全部数字,则结果为 0。

1.num仅有数字组成

2.num是合法的数字,不含前导0

3.删除之后的num,请去掉前导0(不算在移除次数中)

数据范围:num的长度满足 1≤105 1≤k≤n≤105  ,保证 num 中仅包含 0~9 的十进制数

输入描述

第一行输入一个字符串数字,一个数字K

输出描述

剩余的数字文章来源地址https://www.toymoban.com/news/detail-665145.html

示例一

输入

"1432219",3

输出

"1219"
 

示例二

输入

"100999",3

输出

"9"

代码实现

# coding:utf-8

# 移掉 K 位数字
# https://www.nowcoder.com/practice/0fe685c8272d40f1b9785fedd2499c1c?tpId=196&tqId=39412&ru=/exam/oj
"""
思路:
        核心:以某字符为中心,寻找左边的最近比该字符严格小的字符。(单调栈:严格单调递增)
        步骤:
            从左到右遍历字符串,如果栈非空&&栈顶元素>=当前字符&&k!=0,则弹栈,并最后将当前字符入栈。
            当k==0时,则说明弹栈次数用完了。
            当弹出0的时候,不需k--,因为前导0忽略。
            最后,当弹栈次数用完后,只需将栈中字符和未入栈字符拼接,即可得到数值最小化。
"""
class Solution:
    def removeKnums(self, num, k):
        # write code here
        stack = []
        for i in range(len(num)):
            while stack and k and int(num[i]) < int(stack[-1]):
                k -= 1
                stack.pop()
            if not stack and num[i] == '0':
                continue
            stack.append(num[i])
        stack = stack[:-k] if k else stack
        if not stack:
            stack.append('0')
        return ''.join(stack)

到了这里,关于华为OD-移掉K位数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【华为OD机试真题】1067 - 新工号中数字的最短长度(JAVA C++ Python JS) | 机试题+算法思路+考点+代码分析

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用C++语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习 🎃题目描述

    2024年02月05日
    浏览(68)
  • 华为OD机试 - 恢复数字序列(Java & JS & Python)

    题目描述 对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。 现给定一个按如上规则得到的打乱字符的字符串,请将其

    2024年02月11日
    浏览(47)
  • 【华为OD机试真题】1186 - 微服务的集成测试(JAVA C++ Python JS) | 机试题+算法思路+考点+代码分析

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习

    2024年02月05日
    浏览(40)
  • 华为OD机试 - 数字序列比大小(Java & JS & Python)

    题目描述 A,B两个人玩一个数字比大小的游戏,在游戏前,两个人会拿到相同长度的两个数字序列,两个数字序列不相同的,且其中的数字是随机的。 A,B各自从数字序列中挑选出一个数字进行大小比较,赢的人得1分,输的人扣1分,相等则各自的分数不变。 用过的数字需要

    2024年02月14日
    浏览(51)
  • 【华为OD机试真题】数字加减游戏(java&python)

    【华为OD机试真题 20222023】真题目录 @点这里@ 【华为OD机试真题】信号发射和接收 试读 @点这里@ 【华为OD机试真题】租车骑绿道 试读 @点这里@ 知识点广搜时间限制:1s空间限制:256MB限定语言:不限 小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字s变成数字t。

    2023年04月17日
    浏览(59)
  • 华为OD机试 - 螺旋数字矩阵(Java & JS & Python & C)

    题目描述 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数 n (0 n ≤ 999)和行数 m(0 m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,....,n,最终形成一个 m 行矩阵。 小明对这个矩阵有些要求: 每行数字的

    2024年02月03日
    浏览(39)
  • 华为OD机试 - 相同数字组成图形的周长(Java & JS & Python)

    题目描述 有一个64×64的矩阵,每个元素的默认值为0,现在向里面填充数字,相同的数字组成一个实心图形,如下图所示是矩阵的局部(空白表示填充0): 数字1组成了蓝色边框的实心图形,数字2组成了红色边框的实心图形。 单元格的边长规定为1个单位。 请根据输入,计算

    2023年04月21日
    浏览(103)
  • 【华为OD机试 】数字字符串组合倒序(C++ Java JavaScript Python)

    华为OD统一考试A卷+B卷 新题库说明 2023年5月份,华为官方已经将的 2022/0223Q(1/2/3/4)统一修改为OD统一考试(A卷)和OD统一考试(B卷)。 你收到的链接上面会标注A卷还是B卷。请注意:根据反馈,目前大部分收到的都是B卷。但是仍有概率抽到A卷。 A卷对应2023的新题库(2022Q4 2

    2024年02月05日
    浏览(51)
  • 【免费题库】华为OD机试 - 找数字(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 小扇和小船今天又玩起来了数字游戏, 小船给小扇一个正整数 n(1 ≤ n ≤ 1e9),小扇需要找到一个比 n 大的数字 m,使得 m 和 n 对应的二进制中 1 的个数要相同,如: 4对应二进制

    2024年04月12日
    浏览(47)
  • 【免费题库】华为OD机试 - 螺旋数字矩阵(Java & JS & Python & C & C++)

    哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数 n (0 n ≤ 999)和行数 m(0 m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,

    2024年04月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包