StringtoInteger(atoi)题目来源:https://leetcode-cn.com/problems/string-to-integer-atoi题目实现一个atoi函数,使其可以将字符串转换为转换为整数。首先,该函数根据需要丢弃无用的前导空白字符,直到找到第一个非空白字符。当我们要查找的第一个非空字符是正号或负号时,该符号与尽可能多的连续数字组合,作为整数的正负号;如果第一个非空字符是数字,则直接将它们与后面连续的数字字符组合成一个整数。字符串有效整数部分后可能有冗余字符,这些字符可以忽略,应该不会影响功能。注意:如果字符串中的第一个非空白字符不是有效的整数字符、字符串为空或字符串仅包含空白字符,则您的函数不需要转换。在任何情况下,如果函数无法执行有效转换,则返回0。解释:假设我们的环境只能存储32位有符号整数,那么它的取值范围是[?231,231?1]。如果值超出此范围,则返回INT_MAX(231?1)或INT_MIN(?231)。示例1:输入:"42"输出:42示例2:输入:"-42"输出:-42解释:第一个非空白字符是'-',这是一个减号。我们尝试将负号与后面的所有连续数字组合起来,最后得到-42。示例3:输入:"4193withwords"输出:4193解释:转换在数字'3'处结束,因为它的下一个字符不是数字。示例4:输入:"wordsand987"输出:0解释:第一个非空字符是'w',但它不是数字或加号或减号。因此无法执行有效的转换。示例5:输入:“-91283472332”输出:-2147483648解释:数字“-91283472332”超出了32位有符号整数的范围。因此返回INT_MIN(?231)。解题思路是先去掉前面的空格(这里没有使用lstrip()函数,避免创建新的变量,直接定位非空格字符的索引);定位到不是空格的索引后,从这里判断第一个字符为+和-case。定义sign,初始化为1表示正数,如果遇到-,修改为-1,表示负数判断是否为数字,直接与ASCII码值比较;如果没有+和-字符,则判断第一个字符不是数字,直接跳出循环;判断该值是否会越界,如果越界则跳出循环。关于越界部分的内容,可以参考下面这篇文章:Python整数反转上面的文章大致说到了越界的情况,这里的处理也是类似的。只是这里遍历的字符和负模不同,所以在处理最小值边界的时候要注意。代码实现类解决方案:defmyAtoi(self,str:str)->int:#max_value_div_10=(1<<31)//10#min_value_div_10=-(-((1<<31)-1)//-10)INT_MAX=(1<<31)-1INT_MIN=-(1<<31)str_len=len(str)#去掉空格,这里不要使用lstrip(),避免新的遍历#直接定位不是的字符索引aspaceindex=0whileindex
