实现 atoi
,将字符串转为整数。
提示:仔细考虑所有输入情况。如果你想挑战自己,请不要看下面并自己考虑所有可能的输入情况。
说明:这题解释的比较模糊(即没有指定输入格式)。你得事先汇集所有的输入情况。
atoi的要求:
这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或负号后面跟随尽可能多的数字,并将其解释为数字的值。
字符串可以在形成整数的字符后包括多余的字符,将这些字符忽略,这些字符对于函数的行为没有影响。
如果字符串中的第一个非空白的字符不是有效的整数,或者没有这样的序列存在,字符串为空或者只包含空白字符则不进行转换。
如果不能执行有效的转换,则返回 0。如果正确的值超过的可表示的范围,则返回 INT_MAX(2147483647)或 INT_MIN(-2147483648)。
1.用跑下标的方式,主要还得判断去除空格以后,字符前面正负号的问题,如果是一个符号还好,如果多个符号就得return 0。
class Solution:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
numset={'0','1','2','3','4','5','6','7','8','9'}
op={"-","+"}
if str =="" or str.isspace():
return 0
ms = str.lstrip()
low = 0
res = 0
while low < len(ms) and ms[low] in op:#判断符号位是否正确
low += 1
if low > 1 or low == len(ms): return 0 #只有符号没有数字,或者符号多于一个
while low < len(ms):
if ms[low] in numset:
res = res * 10 + int(ms[low])
else:
break
low += 1
if ms[0]== "-":
return max(-res,-0x80000000)
return min(res,0x7FFFFFFF)
2.正则大法好
class Solution:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
res =''
tmp = re.findall('^[-+]?\d+',str.strip())#正则判断,非法字符串会返回空,返回的必是带有一个+/-或无符号的数字串
if tmp:
ms = tmp[0]
if ms[0] == "-" or ms[0] == "+":
res = ms[1:]
else:
res = ms
res = int(res)
if ms[0]== "-":
return max(-res,-0x80000000)
return min(res,0x7FFFFFFF)
else:
return 0