1

8. 字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。
函数 myAtoi(string s) 的算法如下:
空格:读入字符串并丢弃无用的前导空格(" ")
符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。
转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
舍入:如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于−2^31的整数应该被舍入为 −2^31 ,大于2^31 − 1的整数应该被舍入为 2^31 − 1
返回整数作为最终结果。

🚩 思路:第一步去除字符串左侧的空格,使用库函数s.lstrip();第二步判断符号;第三步遍历字符串,如果有数字,则累加起来,如果没有的话则返回

class Solution:
    def myAtoi(self, s: str) -> int:
        s = s.lstrip() # 去除左边的空格
        res = 0
        i = 0
        sign = 1
        if i < len(s) and (s[i] == '-' or s[i] == '+'): # 符号判断
            sign = -1 if s[i] == '-' else 1
            i += 1
        while i < len(s) and s[i].isdigit():
            res = res * 10 + int(s[i])
            if res * sign > 2**31 - 1: #边界判断
                return 2**31 - 1
            if res * sign < -2**31:#边界判断
                return -2**31
            i += 1
        return res*sign

posted @ 2024-06-01 22:16  Bonne_chance  阅读(64)  评论(0)    收藏  举报
1