Skip to content

Commit cadae08

Browse files
authored
Restored task 8
1 parent bf69933 commit cadae08

File tree

1 file changed

+60
-37
lines changed
  • src/main/java/g0001_0100/s0008_string_to_integer_atoi

1 file changed

+60
-37
lines changed

src/main/java/g0001_0100/s0008_string_to_integer_atoi/readme.md

Lines changed: 60 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,87 +2,115 @@
22

33
Medium
44

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).
66

77
The algorithm for `myAtoi(string s)` is as follows:
88

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

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

1621
**Example 1:**
1722

1823
**Input:** s = "42"
1924

2025
**Output:** 42
2126

22-
**Explanation:**
27+
**Explanation:** The underlined characters are what is read in, the caret is the current reader position.
2328

24-
The underlined characters are what is read in and the caret is the current reader position.
2529
Step 1: "42" (no characters read because there is no leading whitespace)
26-
^
30+
^
2731
Step 2: "42" (no characters read because there is neither a '-' nor '+')
2832
^
2933
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.
3137

3238
**Example 2:**
3339

34-
**Input:** s = " -042"
40+
**Input:** s = " -42"
3541

36-
**Output:** \-42
42+
**Output:** -42
3743

3844
**Explanation:**
3945

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

4756
**Example 3:**
4857

49-
**Input:** s = "1337c0d3"
58+
**Input:** s = "4193 with words"
5059

51-
**Output:** 1337
60+
**Output:** 4193
5261

5362
**Explanation:**
5463

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)
5665
^
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 '+')
5867
^
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)
6069
^
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.
6173

6274
**Example 4:**
6375

64-
**Input:** s = "0-1"
76+
**Input:** s = "words and 987"
6577

6678
**Output:** 0
6779

6880
**Explanation:**
6981

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)
7183
^
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 '+')
7385
^
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.
7691

7792
**Example 5:**
7893

79-
**Input:** s = "words and 987"
94+
**Input:** s = "-91283472332"
8095

81-
**Output:** 0
96+
**Output:** -2147483648
8297

8398
**Explanation:**
8499

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 `'.'`.
86114

87115
To solve the String to Integer (atoi) problem in Java using a `Solution` class, we'll follow these steps:
88116

@@ -153,9 +181,4 @@ public class Solution {
153181
}
154182
```
155183

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

Comments
 (0)