题解 | #把字符串转换成整数(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
全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务