转移矩阵结构:
图片来源:https://leetcode.cn/problems/string-to-integer-atoi/solution/zi-fu-chuan-zhuan-huan-zheng-shu-atoi-by-leetcode-/
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