题解 | #把字符串转换成整数(atoi)#
题目:https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f 根据题目一个一个转换条件,在(报bug)过程中注意边界特殊情况的书写。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param s string字符串
# @return int整型
#
class Solution:
def StrToInt(self , s: str) -> int:
s = s.strip()#得到删除字符串前导和尾随空格的字符串副本
n=len(s)
sign=1
i=0
if not s:#特殊情况
return 0
if s[0]=="+":
sign=1
i=i+1
elif s[0]=='-':
sign=-1
i=i+1
start=i#记录一下这个0或1的开始位,后面要用
if s=='+' or s=='-' or s[i]<'0' or s[i]>'9' :#如果第一个字符(除去符号位)不是数字,或者就是只有符号位(这个条件放前面,不然s[1]下标越界),返回0。
return 0
while i<n:#接下来的字符如果是数字,就继续,不然就停止遍历,此时i=i+1,截至i位都是数字
if s[i]>='0' and s[i]<='9':
i=i+1
else:
break
res=0#找完数字字符串后,开始算数
for num in range(start,i):
digit=ord(s[num])-48#ord()是一个获取某字符对应的 ASCII 数值的函数。ord(“0”)=48
res=res+digit*10**(i-num-1)
res=res*sign #乘上符号
#处理越界
if res>2**31-1:
res=2**31-1
elif res<-2**31:
res=-2**31
return res