|  | 
| 2 | 2 | 
 | 
| 3 | 3 | Medium | 
| 4 | 4 | 
 | 
| 5 |  | -Implement the `myAtoi(string s)` function, which converts a string to a 32-bit signed integer. | 
|  | 5 | +Implement the `myAtoi(string s)` function, which converts a string to a 32-bit signed integer (similar to C/C++'s `atoi` function). | 
| 6 | 6 | 
 | 
| 7 | 7 | The algorithm for `myAtoi(string s)` is as follows: | 
| 8 | 8 | 
 | 
| 9 |  | -1.  **Whitespace**: Ignore any leading whitespace (`" "`). | 
| 10 |  | -2.  **Signedness**: Determine the sign by checking if the next character is `'-'` or `'+'`, assuming positivity if neither present. | 
| 11 |  | -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. | 
| 12 |  | -4.  **Rounding**: If the integer is out of the 32-bit signed integer range <code>[-2<sup>31</sup>, 2<sup>31</sup> - 1]</code>, then round the integer to remain in the range. Specifically, integers less than <code>-2<sup>31</sup></code> should be rounded to <code>-2<sup>31</sup></code>, and integers greater than <code>2<sup>31</sup> - 1</code> should be rounded to <code>2<sup>31</sup> - 1</code>. | 
|  | 9 | +1.  Read in and ignore any leading whitespace. | 
|  | 10 | +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. | 
|  | 11 | +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. | 
|  | 12 | +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). | 
|  | 13 | +5.  If the integer is out of the 32-bit signed integer range <code>[-2<sup>31</sup>, 2<sup>31</sup> - 1]</code>, then clamp the integer so that it remains in the range. Specifically, integers less than <code>-2<sup>31</sup></code> should be clamped to <code>-2<sup>31</sup></code>, and integers greater than <code>2<sup>31</sup> - 1</code> should be clamped to <code>2<sup>31</sup> - 1</code>. | 
|  | 14 | +6.  Return the integer as the final result. | 
| 13 | 15 | 
 | 
| 14 |  | -Return the integer as the final result. | 
|  | 16 | +**Note:** | 
|  | 17 | + | 
|  | 18 | +*   Only the space character `' '` is considered a whitespace character. | 
|  | 19 | +*   **Do not ignore** any characters other than the leading whitespace or the rest of the string after the digits. | 
| 15 | 20 | 
 | 
| 16 | 21 | **Example 1:** | 
| 17 | 22 | 
 | 
| 18 | 23 | **Input:** s = "42" | 
| 19 | 24 | 
 | 
| 20 | 25 | **Output:** 42 | 
| 21 | 26 | 
 | 
| 22 |  | -**Explanation:** | 
|  | 27 | +**Explanation:** The underlined characters are what is read in, the caret is the current reader position. | 
| 23 | 28 | 
 | 
| 24 |  | -    The underlined characters are what is read in and the caret is the current reader position. | 
| 25 | 29 |     Step 1: "42" (no characters read because there is no leading whitespace) | 
| 26 |  | -             ^ | 
|  | 30 | +             ^  | 
| 27 | 31 |     Step 2: "42" (no characters read because there is neither a '-' nor '+') | 
| 28 | 32 |              ^ | 
| 29 | 33 |     Step 3: "42" ("42" is read in) | 
| 30 |  | -              ^  | 
|  | 34 | +               ^ | 
|  | 35 | + | 
|  | 36 | +The parsed integer is 42. Since 42 is in the range [-2<sup>31</sup>, 2<sup>31</sup> - 1], the final result is 42.  | 
| 31 | 37 | 
 | 
| 32 | 38 | **Example 2:** | 
| 33 | 39 | 
 | 
| 34 |  | -**Input:** s = " -042" | 
|  | 40 | +**Input:** s = " -42" | 
| 35 | 41 | 
 | 
| 36 |  | -**Output:** \-42 | 
|  | 42 | +**Output:** -42 | 
| 37 | 43 | 
 | 
| 38 | 44 | **Explanation:** | 
| 39 | 45 | 
 | 
| 40 |  | -    Step 1: "___-042" (leading whitespace is read and ignored) | 
| 41 |  | -                ^ | 
| 42 |  | -    Step 2: " -042" ('-' is read, so the result should be negative) | 
| 43 |  | -              ^ | 
| 44 |  | -    Step 3: " -042" ("042" is read in, leading zeros ignored in the result) | 
| 45 |  | -                 ^  | 
|  | 46 | +    Step 1: " -42" (leading whitespace is read and ignored) | 
|  | 47 | +              ^  | 
|  | 48 | +    Step 2: " -42" ('-' is read, so the result should be negative) | 
|  | 49 | +               ^ | 
|  | 50 | +    Step 3: " -42" ("42" is read in) | 
|  | 51 | +                 ^ | 
|  | 52 | +    The parsed integer is -42. | 
|  | 53 | + | 
|  | 54 | +Since -42 is in the range [-2<sup>31</sup>, 2<sup>31</sup> - 1], the final result is -42.  | 
| 46 | 55 | 
 | 
| 47 | 56 | **Example 3:** | 
| 48 | 57 | 
 | 
| 49 |  | -**Input:** s = "1337c0d3" | 
|  | 58 | +**Input:** s = "4193 with words" | 
| 50 | 59 | 
 | 
| 51 |  | -**Output:** 1337 | 
|  | 60 | +**Output:** 4193 | 
| 52 | 61 | 
 | 
| 53 | 62 | **Explanation:** | 
| 54 | 63 | 
 | 
| 55 |  | -    Step 1: "1337c0d3" (no characters read because there is no leading whitespace) | 
|  | 64 | +    Step 1: "4193 with words" (no characters read because there is no leading whitespace) | 
| 56 | 65 |              ^ | 
| 57 |  | -    Step 2: "1337c0d3" (no characters read because there is neither a '-' nor '+') | 
|  | 66 | +    Step 2: "4193 with words" (no characters read because there is neither a '-' nor '+') | 
| 58 | 67 |              ^ | 
| 59 |  | -    Step 3: "1337c0d3" ("1337" is read in; reading stops because the next character is a non-digit) | 
|  | 68 | +    Step 3: "4193 with words" ("4193" is read in; reading stops because the next character is a non-digit) | 
| 60 | 69 |                  ^  | 
|  | 70 | +    The parsed integer is 4193. | 
|  | 71 | + | 
|  | 72 | +Since 4193 is in the range [-2<sup>31</sup>, 2<sup>31</sup> - 1], the final result is 4193.  | 
| 61 | 73 | 
 | 
| 62 | 74 | **Example 4:** | 
| 63 | 75 | 
 | 
| 64 |  | -**Input:** s = "0-1" | 
|  | 76 | +**Input:** s = "words and 987" | 
| 65 | 77 | 
 | 
| 66 | 78 | **Output:** 0 | 
| 67 | 79 | 
 | 
| 68 | 80 | **Explanation:** | 
| 69 | 81 | 
 | 
| 70 |  | -    Step 1: "0-1" (no characters read because there is no leading whitespace) | 
|  | 82 | +    Step 1: "words and 987" (no characters read because there is no leading whitespace) | 
| 71 | 83 |              ^ | 
| 72 |  | -    Step 2: "0-1" (no characters read because there is neither a '-' nor '+') | 
|  | 84 | +    Step 2: "words and 987" (no characters read because there is neither a '-' nor '+') | 
| 73 | 85 |              ^ | 
| 74 |  | -    Step 3: "0-1" ("0" is read in; reading stops because the next character is a non-digit) | 
| 75 |  | -              ^  | 
|  | 86 | +    Step 3: "words and 987" (reading stops immediately because there is a non-digit 'w') | 
|  | 87 | +             ^ | 
|  | 88 | +    The parsed integer is 0 because no digits were read. | 
|  | 89 | + | 
|  | 90 | +Since 0 is in the range [-2<sup>31</sup>, 2<sup>31</sup> - 1], the final result is 0.  | 
| 76 | 91 | 
 | 
| 77 | 92 | **Example 5:** | 
| 78 | 93 | 
 | 
| 79 |  | -**Input:** s = "words and 987" | 
|  | 94 | +**Input:** s = "-91283472332" | 
| 80 | 95 | 
 | 
| 81 |  | -**Output:** 0 | 
|  | 96 | +**Output:** -2147483648 | 
| 82 | 97 | 
 | 
| 83 | 98 | **Explanation:** | 
| 84 | 99 | 
 | 
| 85 |  | -Reading stops at the first non-digit character 'w'. | 
|  | 100 | +    Step 1: "-91283472332" (no characters read because there is no leading whitespace) | 
|  | 101 | +            ^ | 
|  | 102 | +    Step 2: "-91283472332" ('-' is read, so the result should be negative) | 
|  | 103 | +              ^ | 
|  | 104 | +    Step 3: "-91283472332" ("91283472332" is read in) | 
|  | 105 | +                         ^ | 
|  | 106 | +    The parsed integer is -91283472332. | 
|  | 107 | + | 
|  | 108 | +Since -91283472332 is less than the lower bound of the range [-2<sup>31</sup>, 2<sup>31</sup> - 1], the final result is clamped to -2<sup>31</sup> = -2147483648.   | 
|  | 109 | + | 
|  | 110 | +**Constraints:** | 
|  | 111 | + | 
|  | 112 | +*   `0 <= s.length <= 200` | 
|  | 113 | +*   `s` consists of English letters (lower-case and upper-case), digits (`0-9`), `' '`, `'+'`, `'-'`, and `'.'`. | 
| 86 | 114 | 
 | 
| 87 | 115 | To solve the String to Integer (atoi) problem in Java using a `Solution` class, we'll follow these steps: | 
| 88 | 116 | 
 | 
| @@ -153,9 +181,4 @@ public class Solution { | 
| 153 | 181 | } | 
| 154 | 182 | ``` | 
| 155 | 183 | 
 | 
| 156 |  | -This implementation provides a solution to the String to Integer (atoi) problem in Java. | 
| 157 |  | - | 
| 158 |  | -**Constraints:** | 
| 159 |  | - | 
| 160 |  | -*   `0 <= s.length <= 200` | 
| 161 |  | -*   `s` consists of English letters (lower-case and upper-case), digits (`0-9`), `' '`, `'+'`, `'-'`, and `'.'`. | 
|  | 184 | +This implementation provides a solution to the String to Integer (atoi) problem in Java. | 
0 commit comments