给你一个以字符串表示的非负整数 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位整数,显然应该优先把高位的数字降低,这样对新数值的影响最大。
- 如何把高位的数字降低?
- 把原整数的所有数字从左向右进行比较。如果发现某一位数字大于它右面的数字,那么在删除该数字后,必然会使该数位的值降低,因为右方的比它小的数字顶替了它的位置。