leetcode — 402. 移掉 K 位数字

这是一篇关于LeetCode 402题的解决方案,主要使用贪心策略。题目要求从非负整数中移除K个数字,使剩余数字形成的整数最小。文章介绍了贪心算法的思想,即通过比较数字序列的相邻元素,删除高位较大的数字,以保持序列的最小化。同时,文章讨论了如何优化算法,避免暴力求解,通过单调栈来降低时间复杂度和空间复杂度。
摘要由CSDN通过智能技术生成

给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。

示例 1 :

输入:num = "1432219", k = 3
输出:"1219"
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。

示例 2 :

输入:num = "10200", k = 1
输出:"200"
解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

示例 3 :

输入:num = "10", k = 2
输出:"0"
解释:从原数字移除所有的数字,剩余为空就是 0 。

提示:

  • 1 <= k <= num.length <= 10^5
  • num 仅由若干位数字(0 - 9)组成
  • 除了 0 本身之外,num 不含任何前导零

        题意:给出一个整数,从该整数中去掉 k 个数字,要求剩下的数字形成新的整数尽可能小。应该如何选取被去掉的数字?

        其中整数的长度 大于 或 等于 k,给出的整数的大小可以超过 long 类型的数字范围。 

  • 问题简化:如果只删除其中的一个数字,即 k = 1,如何让新整数值最小?
    • 不仅要考虑数字本身的大小,也要考虑 位置 的影响。—— 一个整数的最高位减少1,对数值的影响也非常大。
    • 以 541 270 936 为例,去掉一个数之后的结果为 从9位整数变为8位整数。—— 既然同样是8位整数,显然应该优先把高位的数字降低,这样对新数值的影响最大。
  • 如何把高位的数字降低?
    • 把原整数的所有数字从左向右进行比较。如果发现某一位数字大于它右面的数字,那么在删除该数字后,必然会使该数位的值降低,因为右方的比它小的数字顶替了它的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值