Skip to main content
Back to problems
#8
Medium Algorithms

String to integer

String
20.6% acceptance
Jan 12, 2026
6116
15516
Implement the myAtoi(string s) function, which converts a string to a 32-bit signed integer. The algorithm for myAtoi(string s) is as follows: Whitespace: Ignore any leading whitespace (" "). Signedness: Determine the sign by checking if the next character is '-' or '+', assuming positivity if neither present. Conversion: Read the integer by skipping leading zeros until a non-digit character is encountered or the end of the string is reached. If no digits were read, then the result is 0. Rounding: If the integer is out of the 32-bit signed integer range [-231, 231 - 1], then round the integer to remain in the range. Specifically, integers less than -231 should be rounded to -231, and integers greater than 231 - 1 should be rounded to 231 - 1. Return the integer as the final result.

Solution

Rust
Time O(n)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn my_atoi(s: String) -> i32 {
    let chars: Vec<char> = s.chars().collect();
    let mut i = 0;
    let n = chars.len();
    
    // Step 1: Skip leading whitespace
    while i < n && chars[i] == ' ' {
      i += 1;
    }
    
    // Step 2: Check for sign
    let mut sign = 1;
    if i < n && (chars[i] == '+' || chars[i] == '-') {
      if chars[i] == '-' {
        sign = -1;
      }
      i += 1;
    }
    
    // Step 3: Read digits and check for overflow
    let mut result: i64 = 0;
    while i < n && chars[i].is_ascii_digit() {
      result = result * 10 + (chars[i] as i64 - '0' as i64);
      
      // Step 4: Check for overflow during conversion
      if sign * result > i32::MAX as i64 {
        return i32::MAX;
      }
      if sign * result < i32::MIN as i64 {
        return i32::MIN;
      }
      
      i += 1;
    }
    
    (sign * result) as i32
  }
}