Sword se refiere a la oferta: 20_2. Convertir una cadena en un número entero: Análisis y código (Java)

Sword se refiere a la oferta —— 20_2. Convertir una cadena en un entero —— Análisis y código [Java]

1. Título

Descripción del título Para
convertir una cadena en un entero, se requiere que no se pueda utilizar la función de biblioteca que convierte una cadena en un entero. Si el valor es 0 o la cadena no es un valor legal, devuelve 0.
Descripción de
entrada : ingresa una cadena, incluidos los caracteres alfanuméricos, que puede estar vacía.
Descripción de salida:
si es una expresión numérica legal, devuelve el número; de lo contrario, devuelve 0

示例1
输入  
复制
+2147483647
    1a33
输出
复制
2147483647
    0

Dos, análisis y código

1. Conversión uno por uno + procesamiento de límites

(1) Pensando

En esta pregunta en su conjunto, juzgue y convierta cada carácter de la cadena uno por uno según los requisitos.
Cabe señalar que el valor de retorno requerido por el título es Int, por lo que es necesario determinar aún más si el entero convertido excede el valor límite.

(2) Código

public class Solution {
    
    
    public int StrToInt(String str) {
    
    
        if (str.length() == 0)
            return 0;
        
        char[] strCh = str.toCharArray();
        int isNeg = 1, posi = 0, num = 0;
        if (strCh[0] == '+')
            posi++;
        if (strCh[0] == '-') {
    
    
            isNeg = -1;
            posi++;
        }
        if (str.length() - posi > 10)
            return 0;
        
        for (int i = posi; i < str.length(); i++) {
    
    
            if (strCh[i] < '0' || strCh[i] > '9')
                return 0;
            int digit = strCh[i] - '0';
            if (i - posi == 10) {
    
    
                if ((isNeg == 1 && ((num - Integer.MAX_VALUE / 10) > 0 || digit > Integer.MAX_VALUE - num * 10)) ||
                    (isNeg == -1 && ((num - Integer.MIN_VALUE * 10) < 0 || digit > num * 10 - Integer.MIN_VALUE)))
                    return 0;
            }
            num = num * 10 + isNeg * digit;
        }
        return num;
    }
}

(3) Resultados

Tiempo de ejecución: 15 ms, ocupando 9368 k de memoria.

Tres, otro

Nada.

Supongo que te gusta

Origin blog.csdn.net/zml66666/article/details/112383668
Recomendado
Clasificación