#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)
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
}
}