8. String to Integer (atoi)
8. String to Integer (atoi) - Medium
Problem Description¶
8. String to Integer (atoi)
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:
-
Read in and ignore any leading whitespace.
-
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.
-
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.
-
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). -
If the integer is out of the 32-bit signed integer range
[-2^31, 2^31 - 1]
, then clamp the integer so that it remains in the range. Specifically, integers less than-2^31
should be clamped to-2^31
, and integers greater than2^31 - 1
should be clamped to2^31 - 1
. -
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.
Solution¶
简单的字符串转数字,按照题目上的意思,先忽略空格,再判断空格之后的是不是加减号,然后开始遍历剩下的字符,条件是必须在 0
到 9
之间,否则直接跳出循环,返回答案。
在循环中,将 Integer.MAX_VALUE / 10
与每次算出来的值比较,判断值会不会溢出,如果有溢出,就根据情况返回Integer.MAX_VALUE
或Integer.MIN_VALUE
。
Go稍微有一些特殊,这里我们需要用到int32
的最大值,而默认的int
的最大值为int64
的最大值。所以我们提前定义好这些需要用到的值为常量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|