2024. 10. 22. 12:47ㆍ알고리즘/Leetcode
Solution
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.
Examples
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)
^
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'.
Explanation
class Solution {
public int myAtoi(String s) {
final int len = s.length();
// If len is less than 0, return 0
if(len == 0){
return 0;
}
// Remove white spaces
int index = 0;
while(index < len && s.charAt(index) == ' '){
index++;
}
// If s is equal to ' ', return 0;
if(index == len){
return 0;
}
char ch;
boolean isNegative = (ch = s.charAt(index)) == '-';
// Check the sign (-ve or +ve)
if(isNegative || ch == '+'){
++index;
}
// Add each character & avoid overflow
int result = 0;
while(index < len && isDigit(ch = s.charAt(index))){
int digit = ch - '0';
if(result > (Integer.MAX_VALUE - digit) / 10)
return isNegative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
result = (result * 10) + digit;
++index;
}
return isNegative ? -result : result;
}
// Check whether it is digit or not
private boolean isDigit(char ch){
return ch >= '0' && ch <= '9';
}
}
First Step: Check if the given string, str, is null
If the length of s is 0, return 0
Second Step: Remove white spaces
The variable called index checks each character. If the s leads white spaces, the index is incremented. Also, If the s stores only white spaces, we also return 0.
Third Step: Determine the sign by checking if the next character is '-' or '+'
The boolean variable called isNegative is used for checking the sign. If it is true, it means '-', and the other means '+'.
Fourth Step: Add each digit to the variable, result and avoid overflow of int data type
The variable called result is used to store digit characters. Iterate over the next remaining characters and keep adding them in result by converting the digits (in character form) to integer form. e.g., "-123456" -> -123456, until the non-digit character is found.
'알고리즘 > Leetcode' 카테고리의 다른 글
| Remove Nth Node From End of List (4) | 2024.11.06 |
|---|---|
| Delete Node in a Linked List (0) | 2024.10.25 |
| Longest Common Prefix (1) | 2024.10.16 |
| Implement strStr() (0) | 2024.10.14 |
| Valid Palindrome (2) | 2024.10.11 |