class Solution: # @return an integer def atoi(self, str): str = str.strip() if len(str) == 0: return 0 tmp = "0" result = 0 i = 0 if str in "+-": tmp = str i = 1 MAX_INT = 2147483647 MIN_INT = -2147483648 for i in xrange(i, len(str)): if str[i].isdigit(): tmp += str[i] else: break if len(tmp) > 1: result = int(tmp) if result > MAX_INT > 0: return MAX_INT elif result < MIN_INT < 0: return MIN_INT else: return result
At first, I remove all whitspaces by using strip() function. Then, we should know only one operator is allowed, if there are two operator, for example, "+-2", the input is invalid for atoi() function, 0 should be returned. And we should put as many as possible numerical value into the 'tmp' string. If the length of 'tmp' is 1, it means the 'tmp' is '0' or '+' or '-', and we should return 0 in the function. If the length of 'tmp' is greater than 1, it means the 'tmp' is '0...(numbers)' or '+...(numbers)' or '-...(numbers)', then we can use integer force conversion to make 'tmp' to an integer. At last, If the result is out of the range of representable values, MAX_INT (2147483647) or MIN_INT (-2147483648) is returned.