The description may seem obscure, but actually it wants the first possible valid number in a string.
The detail requirement is a little weird. Note that once a possible number occurs, the problem wants it or you should return a zero if it in fact is not a number. For example, for '+-2' you should return 0 instead of -2, for ' b111' you should return 0 instead of 111.
There are 4 cases:
1. Empty string or no valid number, return 0;
2. Number starts with '+';
3. Number starts with '-';
4. Number without any sign.
# T:O(n) S:O(1)
class Solution:
# @param {string} s
# @return {integer}
def myAtoi(self, s):
INT_MAX, INT_MIN = 2147483647, -2147483648
s = s.lstrip()
if not s:
return 0
ret, sign, i = '', 1, 0
if s[i] == '+':
i += 1
elif s[i] == '-':
i += 1
sign = -1
elif '0' <= s[i] <= '9':
ret += s[i]
i += 1
else:
return 0
while i < len(s) and '0' <= s[i] <= '9':
ret += s[i]
i += 1
if not ret:
return 0
if sign * int(ret) > INT_MAX:
return INT_MAX
elif sign * int(ret) < INT_MIN:
return INT_MIN
else:
return sign * int(ret)
Run Time: 88 ms
No comments:
Post a Comment