【剑指Offer】JZ67 把字符串转换成整数(atoi)
JZ67 把字符串转换成整数(atoi).
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:
- 若干空格
- (可选)一个符号字符('+' 或 '-')
- 数字,字母,符号,空格组成的字符串表达式
- 若干空格
转换算法如下:
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