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);
};

在这里插入图片描述



感谢观看 期待关注



在这里插入图片描述

知乎:带只拖鞋去流浪

简书:带只拖鞋去流浪

哔哩哔哩:带只拖鞋去流浪

关注我,带你一起写bug

warning :版权所有,转载请注明

有问题的小伙伴请在下方留言,喜欢就点个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值