贪心算法
依题意,我们要删除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 :版权所有,转载请注明
有问题的小伙伴请在下方留言,喜欢就点个赞吧