DEV Community

Jaspreet singh
Jaspreet singh

Posted on

String to Integer (atoi)

Problem Statement

Implement the atoi() function that converts a string to a 32-bit signed integer.

Rules:

  • Ignore leading whitespaces.
  • Handle optional + or - sign.
  • Read digits until a non-digit character appears.
  • Clamp the result within:
[-2³¹, 2³¹ - 1]
Enter fullscreen mode Exit fullscreen mode

Brute Force Intuition

In an interview, you can explain it like this:

Remove leading spaces, determine the sign, extract the numeric characters into another string, and finally convert that string into an integer.

This works but requires creating extra strings and doesn't efficiently handle overflow.

Complexity

  • Time Complexity: O(N)
  • Space Complexity: O(N)

Brute Force Code

// Trim spaces
// Store digits into StringBuilder
// Convert using Integer.parseInt()
// Handle exceptions for overflow
Enter fullscreen mode Exit fullscreen mode

Moving Towards the Optimal Approach

Instead of creating another string,

process each character directly.

Maintain:

Current Number

+

Current Sign
Enter fullscreen mode Exit fullscreen mode

Build the answer digit by digit.


Pattern Recognition

Whenever you see:

  • Parse String
  • Convert Characters to Number
  • Overflow Handling

Think:

Linear String Traversal


Key Observation

For every digit:

Current number becomes:

number = number * 10 + digit;
Enter fullscreen mode Exit fullscreen mode

Before updating,

check whether adding this digit would overflow.


Optimal Approach

Step 1

Skip leading spaces.


Step 2

Determine sign.

+

or

-
Enter fullscreen mode Exit fullscreen mode

Step 3

Process every digit.

Update:

number = number * 10 + digit;
Enter fullscreen mode Exit fullscreen mode

Before updating,

check overflow.


Step 4

Return:

sign × number
Enter fullscreen mode Exit fullscreen mode

Optimal Java Solution

class Solution {

    public int myAtoi(String s) {

        int i = 0;
        int n = s.length();

        while (i < n && s.charAt(i) == ' ')
            i++;

        int sign = 1;

        if (i < n &&
           (s.charAt(i) == '+' ||
            s.charAt(i) == '-')) {

            if (s.charAt(i) == '-')
                sign = -1;

            i++;
        }

        int number = 0;

        while (i < n &&
               Character.isDigit(s.charAt(i))) {

            int digit = s.charAt(i) - '0';

            if (number >
                (Integer.MAX_VALUE - digit) / 10) {

                return sign == 1
                        ? Integer.MAX_VALUE
                        : Integer.MIN_VALUE;
            }

            number = number * 10 + digit;

            i++;
        }

        return sign * number;
    }
}
Enter fullscreen mode Exit fullscreen mode

Dry Run

Input

"   -42abc"
Enter fullscreen mode Exit fullscreen mode

Skip spaces.

Sign:

-
Enter fullscreen mode Exit fullscreen mode

Read digits:

4

↓

42
Enter fullscreen mode Exit fullscreen mode

Encounter:

a
Enter fullscreen mode Exit fullscreen mode

Stop.

Answer:

-42
Enter fullscreen mode Exit fullscreen mode

Why This Works?

The number is built one digit at a time.

Overflow is checked before multiplication,

ensuring we never exceed the 32-bit integer range.


Complexity Analysis

Metric Complexity
Time Complexity O(N)
Space Complexity O(1)

Interview One-Liner

Skip spaces, determine the sign, process digits one by one, and check for overflow before updating the current number.


Pattern Learned

String Parsing

↓

Character Traversal

↓

Overflow Check
Enter fullscreen mode Exit fullscreen mode

Similar Problems

  • String to Integer (ATOI)
  • Valid Number
  • Roman to Integer
  • Integer to Roman
  • Basic Calculator

Memory Trick

Think:

Skip Spaces

↓

Sign

↓

Digits

↓

Overflow Check

↓

Answer
Enter fullscreen mode Exit fullscreen mode

Mental Model

Character

↓

Digit

↓

Multiply by 10

↓

Add New Digit
Enter fullscreen mode Exit fullscreen mode

Whenever you hear:

"Implement atoi"

your brain should immediately think:

Linear Traversal + Overflow Handling

Top comments (0)