String to Integer (atoi) https://leetcode.com/problems/string-to-integer-atoi/
- This is an integer related question and we should be careful about negative integers and overflow and underflow.
- Whitespaces must be stripped off. There can be a leading + or - symbol.
- INT_MAX = 2**31-1.
- INT_MIN = -2**31.
- Notice again the trick: num * 10 + int(ch). Do this with an example like 112. num = 1. num = 1 * 10 + 1 = 11. num = 11 * 10 + 2 = 112.
- str.isdigit() and str.strip().
class Solution(object): def myAtoi(self, str): num, neg = 0, 1 # Strip off leading and trailing whitespaces str = str.strip() INT_MIN, INT_MAX = -2**31, 2**31-1 for i,ch in enumerate(str): if ch.isdigit(): num = num*10 + int(ch) # Test for overflow and underflow if num*neg > INT_MAX: return INT_MAX if num*neg < INT_MIN: return INT_MIN # Ignore leading + sign elif (i==0 and ch == "+"): pass # Use the leading "-" sign to determine number is negative elif (i==0 and ch == "-"): neg = -1 # 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. else: break return num*neg