首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

移掉 K 位数字

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小,其中 解题思路 首先我们要了解一个关于数学的前置知识,对于两个相同长度的数字序列,最左边不同的数字决定了这两个数字的大小...,例如,对于 A = 1axxxA = 1axxx,B = 1bxxxB = 1bxxx,如果 a > b,则 A > B 基于此,我们可以知道,若要使得剩下的数字最小,需要保证靠前的数字尽可能小 如果使用暴力法...,那思路就是: 从左到右遍历 对于每一个遍历到的元素,前一个元素比当前元素大,则丢弃前一个元素,否则保留前一个元素 需要注意的是,如果给定的数字是一个单调递增的数字,那么我们的算法会永远选择不丢弃。...因此,对于每个数字,如果该数字小于栈顶元素,我们就不断地弹出栈顶元素,直到 栈为空 新的栈顶元素不大于当前数字 已经删除了 k 位数字 上述步骤结束后我们还需要针对一些情况做额外的处理: 如果我们删除了...m 个数字且 m<k,我们需要从序列尾部删除额外的 k-m 个数字 如果最终的数字序列存在前导零,我们要删去前导零 如果最终数字序列为空,我们应该返回 0 class Solution {

66250

移掉 K 位数字(LeetCode 402)

循环上面的操作,直到移除 K 位数字。 我们以 4258 为例,如果要求我们删除两个数字。 第一次遍历,找到第一个大于右边的数字,为 4,所以删除 4 剩下 258。...比如 108 删除一位数字,那么删除 1 后,最终返回前需要将前导 0 去掉。...因此,对于每个数字,如果该数字小于栈顶元素,我们就不断地弹出栈顶元素,直到 栈为空 或者新的栈顶元素不大于当前数字 或者我们已经删除了 k 位数字 然后入栈。...如果已经删除了 k 位数字,那么将栈中数字与剩余数字拼接,去掉前导零后返回。 如果还没有删除 k 位数字,则继续遍历后面的数字直到遍历完。...移掉 K 位数字 - LeetCode

9610
领券