【剑指Offer】JZ67 把字符串转换成整数(atoi)

JZ67 把字符串转换成整数(atoi).

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:

  1. 若干空格
  2. (可选)一个符号字符('+' 或 '-')
  3. 数字,字母,符号,空格组成的字符串表达式
  4. 若干空格

转换算法如下:
1.去掉无用的前导空格
2.第一个非空字符为+或者-号时,作为该整数的正负号,如果没有符号,默认为正数
3.判断整数的有效部分:
3.1 确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回0
3.2 将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响
3.3 整数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2^31的整数应该被调整为 −2^31 ,大于 2^31 − 1 的整数应该被调整为 2^31 − 1
4.去掉无用的后导空格

代码
# @param s string字符串 
# @return int整型
#
class Solution:
    def StrToInt(self , s: str) -> int:
        # write code here
        maxval = 2147483647
        minval = -2147483648
        i = 0
        sign = 1                    #+-位
        slen = len(s)
        res = 0
        while i < slen and s[i] == ' ':
        	i = i+1
        if i < slen:
        	if s[i] == '+':
        		i = i + 1
        	elif s[i] == '-':
        		i = i + 1
        		sign = -1
        while i < slen:
        	if s[i] >= '0' and s[i] <= '9':
        		res = res*10 + int(s[i])
        		if sign == -1 and res*(-1) < minval:
        			return minval
        		if res > maxval:
        			return maxval
        		i = i + 1
        	else:
        		break
        return sign*res
posted @ 2022-08-01 15:03  一半丶  阅读(29)  评论(0编辑  收藏  举报