本题题意是要自己写一个atoi函数(将字符串转换成整数),有几处细节需要考虑:
1.数字前面有空格,如s=" 123456",空格需舍弃。
2.数字前出现了非数字字符导致转换失败,输出0。如s=" b1234",s=" ++1233", s=" ±1121"。
3.数字中出现了不必要的字符,返回字符前的数字。如s=" 12a1", s=" 123 123"。
4.数字越界,超过了范围 [−2^31, 2^31 − 1],分别返回INT_MAX (2^31 − 1) or INT_MIN (−2^31)。
5.字符串以‘+/-’开头的,转换时要带上。
实现代码如下:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
# solution 1
str = str.strip()
s = 1
if len(str) == 0:
return 0
if str[0] == '-':
s = -1
str = str[1:]
elif str[0] == '+':
str = str[1:]
if len(str) == 0:
return 0
if not str[0].isdigit():
return 0
index = 0
for i in range(len(str)):
if str[i].isdigit():
index = i + 1
else:
index = i
break
r = int(str[:index]) * s
if r < - 2**31:
return - 2**31
elif r > 2**31 - 1:
return 2**31 - 1
return r
看了评论区后,用正则表达式来实现,修改为:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
# solution 2
import re
str = str.strip()
r = re.findall('^[+-]?\d+', str)
if not r:
return 0
ret = int(r[0])
if ret < - 2**31:
return - 2**31
elif ret > 2**31 - 1:
return 2**31 - 1
return ret