8. String to Integer (atoi) LeetCode Solution

In this guide we will provide 8. String to Integer (atoi) LeetCode Solution with best time and space complexity. The solution to String to Integer (atoi) problem is provided in various programming languages like C++, Java and python. This will be helpful for you if you are preparing for placements, hackathon, interviews or practice purposes. The solutions provided here are very easy to follow and with detailed explanations.

Table of Contents

8. String to Integer (atoi) LeetCode Solution image

Problem Statement of String to Integer (atoi)

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 is 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.

Example 1:

Input: s = “42”
Output: 42
Explanation:

The underlined characters are what is read in and the caret is the current reader position.
Step 1: “42” (no characters read because there is no leading whitespace)
^
Step 2: “42” (no characters read because there is neither a ‘-‘ nor ‘+’)
^
Step 3: “42” (“42″ is read in)
^

See also  45. Jump Game II LeetCode Solution

Example 2:

Input: s = ” -042″
Output: -42
Explanation:

Step 1: ” -042″ (leading whitespace is read and ignored)
^
Step 2: ” -042″ (‘-‘ is read, so the result should be negative)
^
Step 3: ” -042″ (“042” is read in, leading zeros ignored in the result)
^

Example 3:

Input: s = “1337c0d3”
Output: 1337
Explanation:

Step 1: “1337c0d3” (no characters read because there is no leading whitespace)
^
Step 2: “1337c0d3” (no characters read because there is neither a ‘-‘ nor ‘+’)
^
Step 3: “1337c0d3” (“1337” is read in; reading stops because the next character is a non-digit)
^

Example 4:

Input: s = “0-1”
Output: 0
Explanation:

Step 1: “0-1” (no characters read because there is no leading whitespace)
^
Step 2: “0-1” (no characters read because there is neither a ‘-‘ nor ‘+’)
^
Step 3: “0-1” (“0” is read in; reading stops because the next character is a non-digit)
^

Example 5:

Input: s = “words and 987”
Output: 0
Explanation:
Reading stops at the first non-digit character ‘w’.

Constraints:

0 <= s.length <= 200
s consists of English letters (lower-case and upper-case), digits (0-9), ' ', '+', '-', and '.'.

Complexity Analysis

  • Time Complexity: O(n)
  • Space Complexity: O(1)

8. String to Integer (atoi) LeetCode Solution in C++

class Solution {
 public:
  int myAtoi(string s) {
    trim(s);
    if (s.empty())
      return 0;

    const int sign = s[0] == '-' ? -1 : 1;
    if (s[0] == '+' || s[0] == '-')
      s = s.substr(1);

    long num = 0;

    for (const char c : s) {
      if (!isdigit(c))
        break;
      num = num * 10 + (c - '0');
      if (sign * num < INT_MIN)
        return INT_MIN;
      if (sign * num > INT_MAX)
        return INT_MAX;
    }

    return sign * num;
  }

 private:
  void trim(string& s) {
    s.erase(0, s.find_first_not_of(' '));
    s.erase(s.find_last_not_of(' ') + 1);
  }
};
/* code provided by PROGIEZ */

8. String to Integer (atoi) LeetCode Solution in Java

class Solution {
  public int myAtoi(String s) {
    s = s.strip();
    if (s.isEmpty())
      return 0;

    final int sign = s.charAt(0) == '-' ? -1 : 1;
    if (s.charAt(0) == '+' || s.charAt(0) == '-')
      s = s.substring(1);

    long num = 0;

    for (final char c : s.toCharArray()) {
      if (!Character.isDigit(c))
        break;
      num = num * 10 + (c - '0');
      if (sign * num <= Integer.MIN_VALUE)
        return Integer.MIN_VALUE;
      if (sign * num >= Integer.MAX_VALUE)
        return Integer.MAX_VALUE;
    }

    return sign * (int) num;
  }
}
// code provided by PROGIEZ

8. String to Integer (atoi) LeetCode Solution in Python

class Solution:
  def myAtoi(self, s: str) -> int:
    s = s.strip()
    if not s:
      return 0

    sign = -1 if s[0] == '-' else 1
    if s[0] in {'-', '+'}:
      s = s[1:]

    num = 0

    for c in s:
      if not c.isdigit():
        break
      num = num * 10 + int(c)
      if sign * num <= -2**31:
        return -2**31
      if sign * num >= 2**31 - 1:
        return 2**31 - 1

    return sign * num
#code by PROGIEZ

Additional Resources

See also  2. Add Two Numbers LeetCode Solution

Feel free to give suggestions! Contact Us