leetcode-402-移掉k位数字
贪心算法
依题意,我们要删除k位数字使得最后这个数值最小,其实不难发现,1432(去掉1位数字最小是132),1432(去掉2位数字最小是12),1432(去掉3位数字最小是1),那么这里面的规律是什么呢?
很显然,就是前一个数比后一个数大就会去除掉,因此,可以开始了。
当然,不能忽略细节
-
去除个数和字符串长度相等时,返回的应该是0; 去除之后,最前的0应该去除(如002应处理成2); 还有,最容易忽略(如2000去除1个数之后会变成000),如果不处理,返回的就可能是空串; 最后,如果是 1432(去掉3位数字最小是1) ,这个处理成的是12,因此我们最后返回的应该是区间[0,stack.length-k]的字符串,也就是1。
var removeKdigits = function(num, k) {
let stack = [];
if (num.length == k) return "0";
for (let val of num) {
while (k && stack.length && stack[stack.length - 1] > val) {
stack.pop();
k--;
}
stack.push(val);
}
let res = stack.join();
if (res == 0) return "0";
while (stack[0] == 0) {
stack.shift()
}
return stack.join().substring(0, stack.length - k);
};
