número entero conversión 8. cadena (atoi)
enlaces a los temas: https://leetcode-cn.com/problems/string-to-integer-atoi/
Dificultad: Media
título Descripción
Atoi a implementar una función, que puede convertir una cadena a un entero.
En primer lugar, la función se iniciará con un carácter de espacio descarta inútil si es necesario, hasta que el hallazgo al primer carácter no-espacio hasta ahora.
Cuando nos encontramos con el primer carácter no-espacio es un número positivo o negativo, la combinación de los símbolos lo más posible con números consecutivos hasta más tarde, como el signo de número entero; si el primer carácter no-espacio es figuras, que directamente después de los caracteres numéricos continuos se combinan para formar un entero.
Además de la cadena después de una parte entera válida también pueden existir caracteres adicionales, estos caracteres pueden ser ignorados, no deben afectar a una función.
Nota: si la cadena de caracteres en el primer carácter que no sea espacio no es una cadena de caracteres entero válido está vacío o contiene sólo la cadena de caracteres de espacio en blanco, entonces no tendrá que ser una función de la conversión.
En cualquier caso, si la función no puede convertir de manera efectiva, se devuelve 0.
Descripción:
Se supone que el tamaño del entorno puede almacenar entero con signo de 32 bits, entonces el rango de valores de [-2 31 es 2 31 es - 1] Si el valor excede este rango, volver INT_MAX (2 31 es -. 1) o INT_MIN (-2 31 es ).
Ejemplos
Ejemplo 1:
Entrada: "42"
de salida: 42
Ejemplo 2:
Entrada: "-42"
de salida: -42
explicó: el primer caracter no blanco '-', es un signo negativo.
Vamos a todos los digitales número negativo consecutivo y más tarde se combina tanto como sea posible, y, finalmente, conseguir -42.
Ejemplo 3:
Entrada: "4193 palabras con"
Salida: 4193
Explicación: la conversión de la OFF digital de '3', debido a que el siguiente carácter no es numérico.
Ejemplo 4:
Entrada: "987 palabras y"
salida: 0
Explicación: el primer carácter no-espacio es una 'w', pero no es un número positivo o número negativo.
Por lo tanto, la conversión no se puede realizar de manera eficaz.
Ejemplo 5:
Entrada: "-91,283,472,332"
de salida: -2147483648
explicación: el número "-91,283,472,332" En el rango de número entero con signo de 32 bits.
Así que volver INT_MIN (-231).
la implementación del código
class Solution:
def myAtoi(self, str: str) -> int:
# str = str.replace(' ','')
flag = 1 # 1表示正数
head_num = 1
num = 0
for char in str:
if char == ' ':
if head_num == 1:
continue
break
elif char <= '9' and char >= '0' or char == '-' or char == '+':
if char == '-' or char == '+':
if head_num == 0:
break
flag = -1 if char == '-' else 1
head_num = 0
else:
num = num*10 + int(char)
head_num = 0
else:
break
if flag*num > 2**31-1:
return flag*2**31-1
elif flag*num < -2**31:
return flag*2**31
return flag*num