diff --git a/src/main/java/g0001_0100/s0008_string_to_integer_atoi/readme.md b/src/main/java/g0001_0100/s0008_string_to_integer_atoi/readme.md
index 743eb17cc..86bc9f4fd 100644
--- a/src/main/java/g0001_0100/s0008_string_to_integer_atoi/readme.md
+++ b/src/main/java/g0001_0100/s0008_string_to_integer_atoi/readme.md
@@ -2,16 +2,21 @@
Medium
-Implement the `myAtoi(string s)` function, which converts a string to a 32-bit signed integer.
+Implement the `myAtoi(string s)` function, which converts a string to a 32-bit signed integer (similar to C/C++'s `atoi` function).
The algorithm for `myAtoi(string s)` is as follows:
-1. **Whitespace**: Ignore any leading whitespace (`" "`).
-2. **Signedness**: Determine the sign by checking if the next character is `'-'` or `'+'`, assuming positivity if neither present.
-3. **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.
-4. **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.
+1. Read in and ignore any leading whitespace.
+2. Check if the next character (if not already at the end of the string) is `'-'` or `'+'`. Read this character in if it is either. This determines if the final result is negative or positive respectively. Assume the result is positive if neither is present.
+3. Read in next the characters until the next non-digit character or the end of the input is reached. The rest of the string is ignored.
+4. Convert these digits into an integer (i.e. `"123" -> 123`, `"0032" -> 32`). If no digits were read, then the integer is `0`. Change the sign as necessary (from step 2).
+5. If the integer is out of the 32-bit signed integer range [-231, 231 - 1], then clamp the integer so that it remains in the range. Specifically, integers less than -231 should be clamped to -231, and integers greater than 231 - 1 should be clamped to 231 - 1.
+6. Return the integer as the final result.
-Return the integer as the final result.
+**Note:**
+
+* Only the space character `' '` is considered a whitespace character.
+* **Do not ignore** any characters other than the leading whitespace or the rest of the string after the digits.
**Example 1:**
@@ -19,70 +24,93 @@ Return the integer as the final result.
**Output:** 42
-**Explanation:**
+**Explanation:** The underlined characters are what is read in, the caret is the current reader position.
- 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)
- ^
+ ^
+
+The parsed integer is 42. Since 42 is in the range [-231, 231 - 1], the final result is 42.
**Example 2:**
-**Input:** s = " -042"
+**Input:** s = " -42"
-**Output:** \-42
+**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)
- ^
+ Step 1: " -42" (leading whitespace is read and ignored)
+ ^
+ Step 2: " -42" ('-' is read, so the result should be negative)
+ ^
+ Step 3: " -42" ("42" is read in)
+ ^
+ The parsed integer is -42.
+
+Since -42 is in the range [-231, 231 - 1], the final result is -42.
**Example 3:**
-**Input:** s = "1337c0d3"
+**Input:** s = "4193 with words"
-**Output:** 1337
+**Output:** 4193
**Explanation:**
- Step 1: "1337c0d3" (no characters read because there is no leading whitespace)
+ Step 1: "4193 with words" (no characters read because there is no leading whitespace)
^
- Step 2: "1337c0d3" (no characters read because there is neither a '-' nor '+')
+ Step 2: "4193 with words" (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)
+ Step 3: "4193 with words" ("4193" is read in; reading stops because the next character is a non-digit)
^
+ The parsed integer is 4193.
+
+Since 4193 is in the range [-231, 231 - 1], the final result is 4193.
**Example 4:**
-**Input:** s = "0-1"
+**Input:** s = "words and 987"
**Output:** 0
**Explanation:**
- Step 1: "0-1" (no characters read because there is no leading whitespace)
+ Step 1: "words and 987" (no characters read because there is no leading whitespace)
^
- Step 2: "0-1" (no characters read because there is neither a '-' nor '+')
+ Step 2: "words and 987" (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)
- ^
+ Step 3: "words and 987" (reading stops immediately because there is a non-digit 'w')
+ ^
+ The parsed integer is 0 because no digits were read.
+
+Since 0 is in the range [-231, 231 - 1], the final result is 0.
**Example 5:**
-**Input:** s = "words and 987"
+**Input:** s = "-91283472332"
-**Output:** 0
+**Output:** -2147483648
**Explanation:**
-Reading stops at the first non-digit character 'w'.
+ Step 1: "-91283472332" (no characters read because there is no leading whitespace)
+ ^
+ Step 2: "-91283472332" ('-' is read, so the result should be negative)
+ ^
+ Step 3: "-91283472332" ("91283472332" is read in)
+ ^
+ The parsed integer is -91283472332.
+
+Since -91283472332 is less than the lower bound of the range [-231, 231 - 1], the final result is clamped to -231 = -2147483648.
+
+**Constraints:**
+
+* `0 <= s.length <= 200`
+* `s` consists of English letters (lower-case and upper-case), digits (`0-9`), `' '`, `'+'`, `'-'`, and `'.'`.
To solve the String to Integer (atoi) problem in Java using a `Solution` class, we'll follow these steps:
@@ -153,9 +181,4 @@ public class Solution {
}
```
-This implementation provides a solution to the String to Integer (atoi) problem in Java.
-
-**Constraints:**
-
-* `0 <= s.length <= 200`
-* `s` consists of English letters (lower-case and upper-case), digits (`0-9`), `' '`, `'+'`, `'-'`, and `'.'`.
+This implementation provides a solution to the String to Integer (atoi) problem in Java.
\ No newline at end of file