8. String to Integer (atoi)

Intuition

We need to convert a string to a valid 32-bit signed integer. However, we have to carefully follow the steps:

  1. Trim whitespace

  2. Determine the sign

  3. Parse digits until a non-digit is encountered

  4. Clamp the result within the integer bounds

This is basically a manual parser that mimics what standard functions like atoi() do in C/C++.

Complexity

Space Complexity
Time Complexity

O(1)\text{O}(1)

O(N)\text{O}(N)

Code

public int myAtoi(String inputString) {
    // Step 1: Trim whitespace
    inputString = inputString.trim();

    // Initialize pointer and accumulator
    int index = 0;
    long numericValue = 0;

    // Edge case: Empty string
    if (inputString.length() == 0) return 0;

    // Step 2: Check for optional sign
    boolean isNegative = (inputString.charAt(index) == '-');
    if (inputString.charAt(index) == '-' || inputString.charAt(index) == '+') {
        index++;
    }

    // Step 3: Parse digits
    while (index < inputString.length()) {
        char currentChar = inputString.charAt(index);
        
        // Stop at first non-digit
        if (!Character.isDigit(currentChar)) break;

        // Build the number one digit at a time
        numericValue = numericValue * 10 + (currentChar - '0');

        // Step 4: Clamp if overflow occurs
        if (numericValue > Integer.MAX_VALUE) {
            return isNegative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
        }

        index++;
    }

    // Step 5: Apply sign
    numericValue = isNegative ? -numericValue : numericValue;

    return (int) numericValue;
}

Last updated