这里要求字符串的第一个非空字符要不是正负号要不是数字,所以先把源字符串的前面的空字符清空。然后在新的字符串中判断首字符是否是正负号或者数字,如果不是则直接返回。否则就计算字符对应的数值大小,在计算过程中如果发现了数字以外的字符则立即返回,因为题目中要求连续的数字字符。还需要注意的是,在返回自己计算的数值时,都需要判断数值是否在允许范围内。
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
num = 0
fuhao = ''
max_num = pow(2, 31) - 1
min_num = -1 * pow(2, 31)
len_s = len(str)
if len(str) == 0:
return 0
for i in range(len_s):
if str[i] == ' ':
continue
else:
break
new_str = str[i:]
len_s = len(new_str)
if len_s == 0:
return 0
start = 0
if new_str[start] == '+' or new_str[start] == '-':
fuhao = new_str[start]
start += 1
elif new_str[start] not in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
return 0
for i in range(start, len_s):
if new_str[i] >= '0' and new_str[i] <= '9':
temp = int(new_str[i])
num = num * 10 + temp
if len(fuhao) > 0:
if fuhao == '+':
if num >= max_num:
return max_num
else:
if -num <= min_num:
return min_num
else:
if fuhao == '-':
if -num <= min_num:
return min_num
else:
return -num
else:
if num >= max_num:
return max_num
else:
return num
if fuhao == '-':
if -num <= min_num:
return min_num
else:
return -num
else:
if num >= max_num:
return max_num
else:
return num