Continuando con la emocionante serie de problemas de LeetCode, toca el turno a la emocionante conversión de cadena a entero al estilo ASCII to Integer como C solía hacerlo. Según Google la función atoi() (ASCII to Integer) pertenece originalmente a la biblioteca estándar de C (stdlib.h) y se utiliza para convertir una cadena de texto en un número entero. Debido a su antigüedad y popularidad, esta función o sus alternativas directas están presentes en múltiples lenguajes:
- C: El lenguaje de origen. La encuentras usando
#include <stdlib.h>. - C++: Heredada de C, también está disponible, aunque a partir de C++11 se recomienda usar
std::stoipor ser más segura ante errores. - PHP: Cuenta con la función nativa
intval()o conversión explícita. - Java, Python y C#: No tienen
atoidirectamente como una función global, pero realizan la misma tarea mediante métodos de clase (por ejemplo,Integer.parseInt()en Java oint()en Python.
Y yo con el recuerdo aun bastante fresco del problema "Reverse Integer" anterior, me lancé a escribir:
class Solution:
def myAtoi(self, s: str) -> int:
positive = True
start = True
result = 0
for char in s.strip():
if start and '+' == char:
start = False
continue
if start and '-' == char:
positive = False
start = False
continue
if not char.isdigit():
break
result = 10 * result + int(char)
start = False
llimit = -2**31
ulimit = 2**31 - 1
if positive and result > ulimit:
result = ulimit
if not positive:
result *= -1
if result < llimit:
result = llimit
return result
Dos observaciones concretas:En cuanto al enfoque: es correcto y es el estándar para este problema. Big O: O(n) en tiempo, O(1) en espacio.
start = Falsese repite en tres ramas distintas — podrías simplificarlo.- El
.strip()elimina espacios de ambos lados, pero el problema solo pide ignorar espacios al inicio. En la práctica no rompe los tests porque los inputs válidos no tienen espacios al final seguidos de dígitos, pero es semánticamente incorrecto.
Claude parecía realmente decepcionado al tener poco que corregirme. Ya no toqué más el problema. Una cosa curiosa es que LeetCode indicaba que en tiempo mi solución era mejor al 100% de las otras soluciones... me sentí como Quick Silver salvando a los X-Men.
| If I could save time in a bottle, the first thing that I'd like to do.... | |



Comentarios
Publicar un comentario