[Pregunta diaria de LeetCode] [Medio] 402. Eliminar K dígitos

[Pregunta diaria de LeetCode] [Medio] 402. Eliminar K dígitos

402. Eliminar K dígitos

402. Eliminar K dígitos

Idea de algoritmo: matriz

tema:

Inserte la descripción de la imagen aquí
Idea: enlace

Inserte la descripción de la imagen aquí

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数组,第二个参数是左边界;第三个参数是新字符串长度
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_39457586/article/details/109704905
Recomendado
Clasificación