崆峒区城乡建设局网站,万网是什么网站,wordpress菜单图标美化,网站规划作品链接#xff1a; https://leetcode.cn/problems/string-to-integer-atoi 题目描述#xff1a; 请你来实现一个 myAtoi(string s) 函数#xff0c;使其能将字符串转换成一个 32 位有符号整数#xff08;类似 C/C 中的 atoi 函数#xff09;。 函数 myAtoi(string s) 的算法…链接 https://leetcode.cn/problems/string-to-integer-atoi 题目描述 请你来实现一个 myAtoi(string s) 函数使其能将字符串转换成一个 32 位有符号整数类似 C/C 中的 atoi 函数。 函数 myAtoi(string s) 的算法如下
读入字符串并丢弃无用的前导空格检查下一个字符假设还未到字符末尾为正还是负号读取该字符如果有。 确定最终结果是负数还是正数。 如果两者都不存在则假定结果为正。读入下一个字符直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数即“123” - 123 “0032” - 32。如果没有读入数字则整数为 0 。必要时更改符号从步骤 2 开始。如果整数数超过 32 位有符号整数范围 [−231,231−1][−2^{31}, 2^{31} − 1][−231,231−1] 需要截断这个整数使其保持在这个范围内。具体来说小于 −231−2^{31}−231 的整数应该被固定为 −231−2^{31}−231 大于 −231−1−2^{31}-1−231−1 的整数应该被固定为 −231−1−2^{31}-1−231−1 。返回整数作为最终结果。
注意
本题中的空白字符只包括空格字符 ’ ’ 。除前导空格或数字后的其余字符串外请勿忽略任何其他字符。
示例 1 输入s “42” 输出42 解释加粗的字符串为已经读入的字符插入符号是当前读取的字符。 第 1 步“42”当前没有读入字符因为没有前导空格 ^ 第 2 步“42”当前没有读入字符因为这里不存在 ‘-’ 或者 ‘’ ^ 第 3 步“42”读入 “42” ^ 解析得到整数 42 。 由于 “42” 在范围 [-231, 231 - 1] 内最终结果为 42 。 示例 2 输入s -42 输出-42 解释 第 1 步 -42读入前导空格但忽视掉 ^ 第 2 步 -42读入 ‘-’ 字符所以结果应该是负数 ^ 第 3 步 -42读入 “42” ^ 解析得到整数 -42 。 由于 “-42” 在范围 [-231, 231 - 1] 内最终结果为 -42 。 示例 3 输入s “4193 with words” 输出4193 解释 第 1 步“4193 with words”当前没有读入字符因为没有前导空格 ^ 第 2 步“4193 with words”当前没有读入字符因为这里不存在 ‘-’ 或者 ‘’ ^ 第 3 步“4193 with words”读入 “4193”由于下一个字符不是一个数字所以读入停止 ^ 解析得到整数 4193 。 由于 “4193” 在范围 [-231, 231 - 1] 内最终结果为 4193 。 提示
0 s.length 200s 由英文字母大写和小写、数字0-9、’ ‘、’‘、’-’ 和 ‘.’ 组成
还需要注意的几个例子 413 0 “-12” 0 正号后边没有接数字 “00000-42a1234” 0 数字后边出现非数字 思路
1.逐个条件判断 2.正则表达式
代码 class Solution:def myAtoi(self, s: str) - int:figure0flag1 #判断正负f0 #判断是否读到数字z0 #是否遇见正负号for c in s:# 第一次读到正负号且前边没有数字if c- and z0 and f0:flag-1z1elif c and z0 and f0:flag1z1# 读到数字elif ord(0)ord(c)ord(9):figurefigure*10int(c)f1# 未读到数字且不是空格或者出现第二个正负号elif f0 and c! :return 0# 已经读到过数字且当前字符不是数字elif f1:break# 读到过了正负号又读到空格elif z1:return 0figurefigure*flagreturn max(min(figure,2**31-1),-2**31) import reclass Solution:def myAtoi(self, s: str) - int:return max(min(int(*re.findall(^[\\-]?\d, s.lstrip())),2**31-1),-2**31) s.lstrip()默认去除左边的空格 re.findall()返回的是一个列表 使用 int() 函数将空的可迭代对象如空列表 []转换为整数时不会引发 ValueError 异常而是返回整数 0。