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.