402. Remove K Digits

2023-11-01

402. Remove K Digits

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible.

Note:

  • The length of num is less than 10002 and will be ≥ k.
  • The given num does not contain any leading zero.

Example 1:

Input: num = "1432219", k = 3
Output: "1219"
Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.

Example 2:

Input: num = "10200", k = 1
Output: "200"
Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.

Example 3:

Input: num = "10", k = 2
Output: "0"
Explanation: Remove all the digits from the number and it is left with nothing which is 0.
题目大意

去除字符串的k个字符使去除之后的数字最小,若没有数字,则为0,并去除结果中的前导0.

思路

也算是贪心思想吧,尽量把小的数字往前放,最好的结果是数字从前往后一直递增,这样就是最小的。我们可以在遍历字符串时,若s[i]<s[i-1],那么就将s[i]删除,若删除后s[i]依然比前一位数字大,则继续删除前一位,直到已经删完k位数字,或者已经遍历到字符串的末尾了。如果此时已经遍历完,但未删除k位数字,则取前length-k位数字即可,因为是递增的。需要注意的是,要去掉结果中的前导0.

代码
class Solution {
    public String removeKdigits(String num, int k) {
        StringBuilder res = new StringBuilder();
        int remain = num.length() - k;
        for(int i = 0; i < num.length(); i++){
            while(k>0 && res.length() != 0 && res.charAt(res.length() - 1) - num.charAt(i) > 0){
                res.deleteCharAt(res.length() - 1);
                k--;
            }
            res.append(num.charAt(i));
        }
        String tmp = res.substring(0, remain).toString();
        String ans = "";
        boolean isprevzero = false;
        for(int i = 0; i < tmp.length(); i++){
            if(!isprevzero && tmp.charAt(i) != '0'){
                isprevzero = true;
            }
            if(isprevzero){
                ans += tmp.charAt(i);
            }
        }
        if(ans.length() == 0) return "0";
        return ans.toString();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

402. Remove K Digits 的相关文章

  • 设计一个也可以在 O(1) 摊余时间内出队的堆栈?

    我有一个抽象数据类型 可以将其视为从左到右存储的列表 具有以下可能的操作 推送 将新项目添加到列表的左端 Pop 删除列表左端的项目 Pull 删除列表右端的项目 使用三个堆栈和恒定的附加内存来实现此目的 以便任何推入 弹出或拉出操作的摊销
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • 扬帆证券:A股高股息资产“画像”:连续数年跑赢大盘

    近期A股分红 大方 股息率较高的板块再次引起关注 走势显着强于同期大盘 并继续遭到商场追捧 有专家在接受证券时报记者采访时以为 近年A股商场高股息财物受捧背面 有多种要素在发挥作用 包含高股息财物本身具有的出资优势 微观经济布景 出资者心态
  • 运行时检查失败 #2 - 变量“x”周围的堆栈已损坏

    在以下代码中返回时 我收到此运行时检查失败 我相信类似的代码在程序的其他地方运行良好 有任何想法吗 String GetVariableName CString symbol CString filepath char acLine 512
  • memcpy 溢出边界利用? (破坏堆栈)

    我试图弄清楚这是否会以某种方式溢出 void print address char p arp hw int i hw length size p OFFSET1 189 4 193 memcpy hw addr packet OFFSET
  • 使用堆栈反转数组

    我正在尝试使用堆栈反转数组 但是 我收到错误arr i stack top 在 Eclipse 中解决它的建议是将其更改为arr i stack pop 或添加演员阵容 还有其他方法吗 或者我犯了一个错误 我看到教程和问题询问如何使用堆栈反
  • 缓冲区溢出攻击(攻击实验室第 2 阶段)

    我有一个缓冲区溢出实验室 我必须为一个名为攻击实验室 http csapp cs cmu edu 3e attacklab pdf 我处于实验室的第二阶段 我必须将代码作为漏洞利用字符串的一部分注入 以使程序指向函数 touch2 的地址
  • 第一次捆绑安装,堆栈级别太深

    我使用命令创建了一个全新的 Rails 项目rails new qbc database mysql 它完美地创建了所有文件 但是 在捆绑包安装时出现错误 bundle install Fetching gem metadata from
  • 如果堆栈在数字较低的地址处增长,为什么指针比较会颠倒这一点?

    由于堆栈向下增长 即朝着数值较小的内存地址增长 为什么 i lt j是真的 如果我错了 请纠正我 但我想这是 C 创建者 C 维护的 的设计决定 但我想知道为什么 同样奇怪的是 堆分配的对象pin位于比堆栈变量在数值上更高的内存地址 这也与
  • geom_text 仅位于堆积条形图的顶部

    我想仅在堆叠条形图的顶部添加标签 这是我的数据框 create data frame building lt c Burj nKhalifa Zifeng nTower Bank of nAmerica Tower Burj Al Arab
  • 使用callstack在C中实现堆栈数据结构?

    我对 C 下内存结构的理解是 程序的内存与堆栈和堆分开 每个堆栈和堆都从块的两端生长 可以想象分配所有 RAM 但显然抽象为某种操作系统内存片段管理器 堆栈设计用于处理局部变量 自动存储 堆设计用于内存分配 动态存储 编者注 有一些 C 实
  • 为什么C++中的内置堆栈接口没有clear()函数?

    在进一步使用它之前 我必须清空堆栈 我确实明白可以这样做 while mystack empty mystack pop 没有这个功能有什么具体原因吗 或者只是第一次制作时没有人感受到它的要求而被排除在外 另外 Java 中的堆栈接口确实有
  • 为什么Python有最大递归深度?

    Python有最大递归深度 但没有最大迭代深度 为什么递归受到限制 把递归当成迭代来对待 而不限制递归调用的次数不是更自然吗 我只想说这个问题的根源来自于尝试实现流 参见这个问题 https stackoverflow com questi
  • 如何检查 uiviewcontroller 是否存在于 uinavigationcontroller 堆栈中

    我有一个UINavigationController 我必须从 a 中弹出一个视图UINavigationController并将其替换为另一个视图 我们如何才能搜索到一个UIViewController对象并将其替换为另一个 当我打印时
  • 什么是堆栈随机化以及它如何防止缓冲区溢出攻击?

    我从一本书上读到缓冲区溢出可能被用作注入攻击系统的漏洞代码的一种方式 和堆栈随机化是防止此类攻击的有效方法之一 我不明白是什么堆栈随机化以及它如何防止这些攻击 代替堆栈随机化克服 或更难 堆栈或缓冲区溢出的技术称为地址空间布局随机化 ASL
  • 哪个更快:堆栈分配或堆分配

    这个问题听起来可能相当简单 但这是我与另一位合作的开发人员进行的辩论 我小心翼翼地在可能的地方进行堆栈分配 而不是堆分配它们 他一边跟我说话 一边看着我 并评论说没有必要 因为他们的表现是一样的 我总是有这样的印象 堆栈的增长是恒定的时间
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 检测堆栈已满

    在编写 C 代码时 我了解到使用堆栈来存储内存是一个好主意 但最近我遇到了一个问题 我有一个实验 其代码如下所示 void fun const unsigned int N float data 1 N N float data 2 N N
  • 平衡括号问题的优化解

    给定一个仅包含字符的字符串 and 判断输入字符串是否有效 输入字符串在以下情况下有效 左括号必须由相同类型的括号封闭 左括号必须按正确的顺序关闭 请注意 空字符串也被视为有效 示例1 Input Output true Example 2
  • Push 和 Pop 对堆栈意味着什么?

    长话短说 我的讲师很糟糕 他通过投影仪向我们展示前缀堆栈的中缀 他的大影子挡住了一切 所以我错过了重要的东西 他指的是push和pop push 0 pop x 他举了一个例子 但我根本看不出他是如何得到答案的 2 3 2 1 5 4 1

随机推荐

  • C语言随机生成mac地址的代码

    以下是使用提供的 rand mac int get 函数和 random mac addr create 函数来生成随机 MAC 地址的示例代码 include
  • 【华为OD机试python】工单调度策略【 2023 Q1 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 当小区通信设备上报警时 系统会自动生成待处理的工单 工单调度系统需要根据不同的策略 调度外线工程师 FME 上站去修复工单对应的问题 根据与运营
  • 音频文件的采样率转换为 16K 的三种方法(python代码)

    要将音频文件的采样率转换为 16K 可以使用 Python 的 wave 模块和 scipy signal 模块 具体步骤如下 打开原始的音频文件 并读取其采样率和采样数据 import wave 打开音频文件 with wave open
  • win10 网卡驱动正常搜索不到WiFi信号 解决方法

    昨天晚上家里停电 早上起来发现电脑没有WiFi了 检查了一上午才搞好 1 检查是否是路由器问题 路由器信号正常 因为手机能连接使用 2 检查是否是网卡驱动问题 打开电脑 管理 设备管理器 查看网卡驱动是否显示异常 打开cmd 输入ping
  • 2023年中国酒店业数字化转型趋势报告

    报告在去年内容的基础上 做了进一步的延展 分析了领先型企业在数字化体系建设过程中表现出的特点及未来技术投资方向 深度剖析了处于数字化转型 进展期 的中国酒店业所取得的数字化成果以及未来的趋势洞察 关注公众号 互联互通社区 回复 SZJJ30
  • 将jar包打包成镜像:Dockerfile 看这一篇就够了

    新建一个目录 该目录下 Dockerfile文件 默认文件名称 内容下面所示 对应的jar包 penjdk 8 jre 为基础镜像 来构建此镜像 可以理解为运行的需要基础环境 FROM openjdk 8 jre WORKDIR指令用于指定
  • unity使物体运行时自动旋转

    using System Collections using System Collections Generic using UnityEngine public class jiaobeng MonoBehaviour public f
  • 网络安全难学吗?前途怎么样?

    会者不难 网络安全是比较复杂的 涵盖网络的各个方面 入门简单 但是要深入学习相对比较难一些 还是要通过各种方法去系统的学习网络安全知识 掌握网络安全技能 才能比较容易的进入到网络安全行业 发展前景 根据相关调研今年上半年 网络安全产业人才需
  • 微信小程序服务器里有数据库吗?,微信小程序云开发服务端数据库API 在集合上新增记录...

    Collection add 在集合上新增记录 函数签名如下 function add options object Promise 参数说明字段名类型必填默认值说明dataObject是新增记录的定义 返回值说明 Promise 的 re
  • Java 概述

    目录 1 Java 语言背景介绍 2 Java 语言跨平台原理 3 JRE 和 JDK 4 JDK 的下载和安装 1 Java 语言背景介绍 语言 人与人交流沟通的表达方式 计算机语言 人与计算机之间进行信息交流沟通的一种特殊语言 Java
  • MIPI CSI接口调试方法:时序调试

    关于的mipi 的规范 协议及物理接口定义 网上文章确实比较多 想必也是每个想要了解mipi的人首先会阅读的 本人也是其中之一 所以这篇短文主要是想记录自己在调试mipi这个接口时遇到的一些问题 1 clock lane continue
  • Linux内核4.14 LTS发布:那些最新最好的功能特性

    9月份 Linux内核开发人员格雷格 克罗 哈特曼 Greg Kroah Hartman 在其个人博客上证实 Linux内核4 14是下一个LTS内核 这个内核将至少被支持两年 最近这个年限被延长到了六年 因此 Linux 4 14的开发周
  • 知识图谱构建过程

    公众号 写bug的程旭源 知识图谱 是结构化的语义知识库 用于迅速描述物理世界中的概念及其相互关系 通过将数据粒度从document级别降到data级别 聚合大量知识 从而实现知识的快速响应和推理 1 知识图谱的基本单位 是 实体 Enti
  • PostgreSQL导出数据到sql文件

    打开cmd 进入数据库名ql安装路径 可以使用 pg dump help命令查看帮助 C Program Files 数据库名QL 9 2 bin gt pg dump h 数据库地址 主机名 p 端口号 U postgres column
  • Nginx(三)源码剖析之内存池,与内存管理

    Nginx源码剖析之内存池 与内存管理 作者 July dreamice 阿波 yixiao 出处 http blog csdn net v JULY v 引言 Nginx 发音同 engine x 是一款轻量级的Web 服务器 反向代理服
  • MAC 下访问EBS Java form

    背景 学习Oracle EBS系统 在最新的 2018年9月 Mac OS 10 13 6下无法使用Safari浏览器打开form 在网上找了很久 也试了很多 都不管用 最终通过重装jre 旧版Chrome 或 Firefox 搞定 安装j
  • 为什么Go是一种设计糟糕的编程语言

    好吧 我承认这个标题有点放肆 我多告诉你一点 我爱肆意妄言的标题 它能够吸引注意力 不管怎样 在这篇博文中我会试图证明 Go 是一个设计得很糟糕的语言 剧透 事实上它是 我已经摆弄 Go 有几个月了 而且 我想我在六月某个时候运行了第一个
  • 正则表达式(校验规则)

    正则表达式 说明 abc a b c中任意一个字符 abc 除了abc的任意一个字符 a z a z中任意一个字符 a zA Z0 9 a zA Z0 9中任意一个字符 a z bc a z中除了bc的任意一个字符 知识点案例 String
  • 剑指Offer - 面试题6:从尾到头打印链表

    题目 输入一个链表的头节点 从尾到头反过来打印出来每个节点的值 链表节点定义如下 struct ListNode int m nKey struct ListNode m pNext 思路 栈方法 从尾到头完全符合栈的特性 我们直接拿栈来存
  • 402. Remove K Digits

    402 Remove K Digits Given a non negative integer num represented as a string remove k digits from the number so that the