转移矩阵结构:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9f086580e3c1fa3bb010bbbe8174b936.png)
图片来源:https://leetcode.cn/problems/string-to-integer-atoi/solution/zi-fu-chuan-zhuan-huan-zheng-shu-atoi-by-leetcode-/
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2921f18e441325a4f7bfbb31be850ebf.png)
class Transmitor(object):
def __init__(self):
self.ans = 0
self.sign = 1
self.trans = {
'start':['start','signed','number','end'],
'signed':['end','end','number','end'],
'number':['end','end','number','end'],
'end':['end','end','end','end']
}
self.state = 'start'
def get_col(self,c):
if c.isspace():
return 0
elif c in ['-','+']:
return 1
elif c.isdigit():
return 2
else:
return 3
def run(self,c):
self.state = self.trans[self.state][self.get_col(c)]
if self.state == 'signed':
if c == '-':
self.sign = -1
elif self.state == 'number':
self.ans = 10 * self.ans + int(c)
if self.ans > 2**31 - 1 or self.ans < -2**31:
self.ans = 2**31 - 1 if self.sign == 1 else -2**31
self.sign = 1
self.state = 'end'
class Solution:
def myAtoi(self, s: str) -> int:
trans = Transmitor()
for c in s:
trans.run(c)
if trans.state == 'end':
break
return trans.ans * trans.sign
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/079264f20fd940b6e3d3ed71e15a9870.png)