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);
};
经验分享 程序员 微信小程序 职场和发展