博客
关于我
移掉 K 位数字
阅读量:411 次
发布时间:2019-03-06

本文共 1566 字,大约阅读时间需要 5 分钟。

要解决这个问题,我们需要找到一种方法,移除字符串表示的非负整数 num 中的 k 位数字,使得剩下的数字尽可能小。以下是详细的解决方案:

方法思路

我们可以通过使用栈来高效地解决这个问题。栈的作用是维护当前能得到的最小数字序列。具体步骤如下:

  • 遍历数字字符串:从左到右遍历 num 中的每个字符。
  • 维护栈:对于每个字符,检查栈顶元素,如果栈顶元素大于当前字符,弹出栈顶元素,并减少 k 的值,直到栈为空或 k 用完。
  • 处理剩余 k 值:如果遍历结束后 k 还有剩余,移除栈的末尾元素,直到 k 用完。
  • 构造结果:将栈中的元素转换为字符串,去掉前导零,处理特殊情况(如结果为空或有前导零)。
  • 这种方法确保我们在每一步都尽可能保留较小的数字,从而得到最小的结果。

    解决代码

    import java.util.Deque;import java.util.LinkedList;public class Solution {    public String removeKdigits(String num, int k) {        Deque
    deque = new LinkedList<>(); for (int i = 0; i < num.length(); i++) { char current = num.charAt(i); while (!deque.isEmpty() && k > 0 && deque.peekLast() > current) { deque.pollLast(); k--; } deque.offerLast(current); } // 如果k还剩余,删除后面的数字 while (k > 0) { deque.pollLast(); k--; } // 构建结果字符串 StringBuilder sb = new StringBuilder(); boolean leadingZero = true; while (!deque.isEmpty()) { char c = deque.pollFirst(); if (leadingZero && c == '0') { continue; } leadingZero = false; sb.append(c); } // 处理特殊情况 if (sb.length() == 0) { return "0"; } return sb.toString(); }}

    代码解释

  • 初始化栈:使用双端队列 deque 来模拟栈,用于高效的插入和移除操作。
  • 遍历字符串:逐个字符处理 num 中的每个字符。
  • 栈操作:对于每个字符,检查栈顶元素,如果栈顶元素大于当前字符,弹出栈顶元素并减少 k,直到栈为空或 k 用完。
  • 处理剩余 k:如果遍历结束后 k 还有剩余,移除栈的末尾元素,直到 k 用完。
  • 构造结果:将栈中的元素转换为字符串,去掉前导零,处理特殊情况,返回最终结果。
  • 这种方法确保了在高效的时间复杂度内解决问题,适用于处理较长的数字字符串。

    转载地址:http://jgjkz.baihongyu.com/

    你可能感兴趣的文章
    Python中不准确的对数
    查看>>
    python中什么是实例方法_在Python中创建实例方法对象的不同方法
    查看>>
    Python中使用cutecharts实现简单的手绘风格的图表
    查看>>
    python中使用dxfgrabber,解析dxf文件信息生成obj文件
    查看>>
    Python中使用ncmbot玩转网易云音乐
    查看>>
    Python中使用PIL快速实现二值图
    查看>>
    Python中使用PIL快速实现灰度图
    查看>>
    Python中使用pip install ncmbot时各种错误解决办法
    查看>>
    Python中使用requests和parsel爬取喜马拉雅电台音频
    查看>>
    Python中使用turtle绘制多个同心圆
    查看>>
    Python中使用turtle绘制棋盘详解
    查看>>
    Python中使用wordcloud生成漂亮的中文词云
    查看>>
    Python中使用wxpy定时机器人给微信好友发送每日一文
    查看>>
    Python中使用zip()并行迭代
    查看>>
    Python中使用推导式创建序列
    查看>>
    Python中信号处理程序和atexit处理程序的调用
    查看>>
    Python中关于txt的简单读写模式与操作
    查看>>
    Python中关于类和函数的初体验之"__init__"和"__str__"不是"_init_"和"_str_"
    查看>>
    python中函数接受参数为*args, **kwargs怎么办
    查看>>
    Python中切片的高效迭代
    查看>>