题目:字符串转换整数 (atoi)
LC 请你来实现一个 atoi 函数,使其能将字符串转换成整数。
分析&思路
- 先去掉开头的空字符,并且如果字符是""或者第一个非空字符不是数字或者正负号就return 0。
- 然后判断第一个字符是正负确定flag值,如果是带符号(+ -)就需要截取字符串从 [1:] 第二个字符开始弹出数字。
- 最后根据题意判断结果数字是否溢出有符号32位整数即可
鄙人写的代码和成绩如下
class Solution:
def myAtoi(self, s: str) :
#去掉首尾空字符
t = s.strip()
#如果第一个字符是空、不是数字、不是正负符号,返回0
if( not t) or not(t[0].isdigit() or t[0] == '-' or t[0] == '+') :
return 0
#定义边界
INT_MAX=(1<<31)-1
INT_MIN=-1<<31
if t[0] == '-':
flag = -1
elif t[0] == '+':
flag = 0
else:
flag = 1
d = 0
#弹出整数d
for i in (t if flag > 0 else t[1:]): #t[1:] "1"
if not i.isdigit():
break
d = d*10 + int(i)
#整数d变成符号数
if flag < 0:
d *= -1
#有符号数范围内
if d > INT_MIN and d < INT_MAX :
return d
#32位以外
return INT_MIN if d < 0 else INT_MAX
题目链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnoilh/
看了大神们的代码,发现还可以使用状态机 DFA的思路和正则表达式,未来再学习使用