移掉 K 位数字

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

  • 输入:num = “1432219”, k = 3

  • 输出:”1219”

  • 解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。

  • 输入:num = “10200”, k = 1

  • 输出:”200”

  • 解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var removeKdigits = function(num, k) {
let stack = []
// 遍历数组
for (let c of num) {
// 1. 删除的数字不到k个
// 2. 前一位的数字大于当前位
while (k && stack[stack.length - 1] > c) {
// 删除前面大的数字
stack.pop()
k--
}
// 如果是前置0 就不用放入栈了 避免 [0, ..., 1]这种情况
if (!stack.length && c === '0') continue
stack.push(Number(c))
}
// 如果删除的个数不到k 则从后删除剩余个数
k && stack.splice(-k)
return stack.join('') || '0'
};