 Python3实现)
全部测试用例通过 ✅。下面是完整实现和讲解。核心思路按题意分4 步走用指针i从左到右扫描去前导空格跳过所有 读符号遇到或-记录sign默认1无符号也算合法读数字只要当前字符是数字就累加result result * 10 digit遇非数字立即停止即使后面还有字符如4193 with words关键读到第一个非数字字符就结束而不是跳过继续读。越界处理易错点题目要求落在32 位有符号整数范围内[-2³¹, 2³¹-1]即[-2147483648, 2147483647]。如果在累加完才判断Python 虽然不会真溢出但逻辑上应在乘法前提前判断if result (INT_MAX - digit) // 10: return INT_MAX if sign 1 else INT_MIN这种先判断再累加的技巧是 atoi 的标准写法也避免了临时值超过 INT_MAX。完整代码class Solution: def myAtoi(self, s: str) - int: INT_MIN, INT_MAX -2 ** 31, 2 ** 31 - 1 i, n 0, len(s) # 1. 跳过前导空格 while i n and s[i] : i 1 # 2. 读取正负号可选 sign 1 if i n and s[i] in (, -): sign -1 if s[i] - else 1 i 1 # 3. 读取数字字符 result 0 while i n and s[i].isdigit(): digit ord(s[i]) - ord(0) # 提前判断是否越界 if result (INT_MAX - digit) // 10: return INT_MAX if sign 1 else INT_MIN result result * 10 digit i 1 return sign * result几个细节提醒空串 / 只有空格 / 只有-result保持0直接返回0正确 ✅0 123读完0后遇到空格停止返回0✅时间复杂度O(n)空间O(1)测试结果覆盖了正数、负数、前导空格、夹带字母、正负溢出、无数字等各种边界情况均符合预期。需要的话我可以再补充正则单行版代码更短或逐行注释版方便理解。