String to Integer (atoi)
Problem
Implement atoi to convert a string to an integer.
Tag
- Maths
- String
Thought
This problem is not hard. The only problem is that it contains a lot of different corner cases which need to be considered.
Requirements for atoi:
- The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.
- The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.
- If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.
- If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.
Code
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
if len(str) == 0:
return 0
result = 0
string = list(str)
index = 0
while string[index] == ' ':
index += 1
if string[index] == '+':
flag = 1
index += 1
elif string[index] == '-':
flag = -1
index += 1
else:
flag = 1
for i in xrange(index, len(string)):
if string[i] < '0' or string[i] > '9':
return result * flag
num = int(string[i])
result = result * 10 + num
if result * flag > 2147483647:
return 2147483647
if result * flag < -2147483648:
return -2147483648
return result * flag