Statementâ–¼
Write a function, myAtoi(string s)
, that converts a string to a 32–bit signed integer. It is equivalent to the atoi
 function in C/C++.
The myAtoi
function reads the input string, s
, from left to right for the conversion process. The conversion begins by removing any leading whitespace. Then, it checks if the next character is '+' or '-'. If it's '-', it implies that the result is negative, and there must be a '-' sign in front of the resulting integer. Otherwise, '+' implies that the result is positive, so there is no need to add a '+' sign in front of the resulting integer. For example, "-
After removing the whitespace, if the first non-space character is not a sign character, '+' or '-', but a non-digit character, i.e., an English letter or the period '
The function continues to read the string while checking if the subsequent character is a digit and stops reading when a non-digit character is encountered. For characters that are digits, the function concatenates them. Next, it transforms the collected digits into their corresponding integer value. It ensures that the sign value, if any, is adjusted to the resulting integer. For example, "
Finally, the function checks if the resulting integer goes out of the range of a 32–bit signed integer,
Note: The space character (' ') and the period ('
. ') are part of the non-digit characters. Therefore, they will get ignored and won't affect the final answer. For example, "790 " converts to7 and "85.9 " converts to85 .
Constraints:
0≤ s.length
≤200 The string
s
 may have:digit characters from
0 –9 .non-digit characters, including lower-case and upper-case English letters, space character (' '), period ('
. '), and sign characters ('+' and '-').
Solution
We'll begin by initializing an iterator i
that will help us keep track of the characters in s
while we process it. Then, we use this iterator to skip all the leading whitespace characters from the input string, s
. This task is straightforward because, in the context of this problem, only space characters, ' ', are considered as whitespace. We iterate over each character in s
and increment i
by 1 whenever we encounter a space character. This process continues until we encounter a non-space character. At that point, we'll stop because i
should now point to the non-space character.
The next step is to check if the current character, s[i]
, is a positive '+' or a negative '-' sign character. If s[i]
== '-', it means the number is negative, so we set the variable, sign
, to -sign
, which is i
to move it to the next character in s
.
Next, we check whether the current character, s[i]
, is a non-digit character. If it is, we stop reading the string further and return s
, and convert them into their respective numeric value. We store the integer representation of digits in a variable, result
. To achieve this, we first check whether s[i]
is a digit. If it is, it should lie in the range s[i]
.
Once we have the numerical value of s[i]
, we concatenate it with the already extracted digits that are stored in result
. For this, we we multiply result
by s[i]
to it. This step shifts the existing digits in result
to the left by one position. For example, if result
is result
While reading and storing the digits from s
, we'll stop if:
We reach the end of the string
s
.We encounter a non-digit character.
The value in
result
goes beyond the limit for a 32-bit signed integer and leads to an overflow.
We check for the potential integer overflow by subtracting the digit from the limit for a 32-bit signed integer and dividing it by result
violates the limit, we don't append the current digit to the result
. Instead, we just return the maximum or minimum value that lies in the 32-bit signed integer range.
Finally, we apply the determined sign to the result by multiplying the result
with sign
, and return the resulting integer as the final output.
Let’s look at the following illustration to get a better understanding of the solution: