题解 | #把字符串转换成整数(atoi)#
把字符串转换成整数(atoi)
https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param s string字符串 # @return int整型 # INT_MAX = 2 ** 31 - 1 INT_MIN = -2 ** 31 class Automaton: def __init__(self): self.state = 'start' self.sign = 1 self.ans = 0 # 状态转移 self.table = { 'start': ['start', 'signed', 'in_number', 'end'], 'signed': ['end', 'end', 'in_number', 'end'], 'in_number': ['end', 'end', 'in_number', 'end'], 'end': ['end', 'end', 'end', 'end'], } # 返回输入c之后的状态 def get_col(self, c): if c.isspace(): return 0 if c == '+' or c == '-': return 1 if c.isdigit(): return 2 return 3 # 迭代转换每个字符为数字self.ans,记录符号位self.sign def get(self, c): self.state = self.table[self.state][self.get_col(c)] if self.state == 'in_number': self.ans = self.ans * 10 + int(c) self.ans = min(self.ans, INT_MAX) if self.sign == 1 else min(self.ans, -INT_MIN) elif self.state == 'signed': self.sign = 1 if c == '+' else -1 class Solution: def StrToInt(self, s: str) -> int: automaton = Automaton() for c in s: if automaton.state == 'end': break automaton.get(c) return automaton.sign * automaton.ans