[Pregunta diaria de LeetCode] [Medio] 402. Eliminar K dígitos
402. Eliminar K dígitos
Idea de algoritmo: matriz
tema:
Idea: enlace
código java
class Solution {
public String removeKdigits(String num, int k) {
//如果长度==k,即全部删除,直接返回0;
if (num.length() == k) {
return "0";
}
int n = num.length();
int right = 0;//右边界
char[] res = new char[n];//利用数组,模拟栈操作
//遍历,向res中加入数值
for (char c : num.toCharArray()) {
//遍历字符串
//保证没有越界;如果前一个数大于现在的数,删除
while (right > 0 && k > 0 && res[right-1] > c) {
k--;//k减1
right--;//右边界向前移动,模拟栈弹出
}
res[right++] = c;//加入新元素,模拟栈加入新元素
}
//如果k还有剩余,则删除最末尾的几个数
while (k > 0) {
right--;//模拟栈弹出
k--;//个数减减
}
//去掉数值前面的0
int left = 0;//左边界
while (left < right && res[left] == '0') {
//如果前面有0,去掉,
left++;//向后移动左边界
}
if (left == right) {
//如果去除完之后为空,说明全部是0.则直接返回0
return "0";
}
return new String(res, left, right - left);//使用这个生成新的字符串更快,自己使用字符串拼接,计算更慢;
//注意:第一个参数是char数组,第二个参数是左边界;第三个参数是新字符串长度
}
}