leetcode —— 面试题67. 把字符串转换成整数

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

示例 1:

输入: “42”
输出: 42

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
——————————————
这里要注意整数的溢出,在每次乘10并相加得到的结果可能会溢出,所以需要进行INT_MAX//10进行溢出判断。其Python代码如下:

class Solution:
    def strToInt(self, str: str) -> int:
        str=str.strip()  # 清空空格字符
        
        if not str:  # 如果字符为空,返回0
            return 0
        if str[0]!='+' and str[0]!='-' and str[0]<'0' and str[0]>'9':  # 如果第一个字符不是+-号或者不是0-9的数值,则返回0
            return 0
            
        flag = 1  # 用于标记是否是+-号
        if str[0]=='-':
            flag = -1
            str = str[1:]
        elif str[0]=='+':
            flag = 1
            str = str[1:]
            
        nums = 0
        for i in range(len(str)):
            if '0'<=str[i]<='9':
                if nums>(2**31-1)//10 or (nums==(2**31-1)//10 and int(str[i]))>7: # 这里是为了防止溢出,如果其值大于INT_MAX//10或者其值等于INT_MAX//10但是最后一个值大于7,则根据flag值返回最大值或者最小值。
                    if flag>0:
                        return 2**31-1
                    else:
                        return -2**31
                nums = nums*10 + int(str[i])
            else:
                break
        return flag*nums
发布了320 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37388085/article/details/105451346