JZ67 把字符串转换成整数(atoi)
描述
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
1 2 3 4 5
| 传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符('+' 或 '-') 3. 数字,字母,符号,空格组成的字符串表达式 4. 若干空格
|
转换算法如下:
1 2 3 4 5 6 7
| 1.去掉无用的前导空格 2.第一个非空字符为+或者-号时,作为该整数的正负号,如果没有符号,默认为正数 3.判断整数的有效部分: 3.1 确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回0 3.2 将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响 3.3 整数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231的整数应该被调整为 −231 ,大于 231 − 1 的整数应该被调整为 231 − 1 4.去掉无用的后导空格
|
数据范围:
$0 <=字符串长度<= 100\字符串由英文字母(大写和小写)、数字(0-9)、’ ‘、’+’、’-‘ 和 ‘.’ 组成$
示例1
示例2
1 2 3
| 输入:" -12 " 返回值:-12 说明:去掉前后的空格,为-12
|
示例3
1 2 3
| 输入:"4396 clearlove" 返回值:4396 说明:6后面的字符不属于有效的整数部分,去除,但是返回前面提取的有效部分
|
示例4
1 2
| 输入:"clearlove 4396" 返回值:0
|
示例5
1 2
| 输入:"-987654321111" 返回值:-2147483648
|
题解
讨厌字符串。python里面有一个方法$string.strip(‘s’)$,可以去掉字符串前后的字符$’s’$,默认去掉空格。
有了这个方法就方便很多了,首先去掉空格,然后从前往后检查,首先检查符号,然后检查是否合法,最后再截断前32位。基本全部都是用的相应的trick。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
class Solution: def StrToInt(self, s: str) -> int: res = 0 index = 0 s = s.strip() n = len(s) if s == "": return 0 sign = 1 if s[index] == "+": index += 1 elif s[index] == "-": index += 1 sign = -1 if index == n: return 0 while index < n: c = s[index] if c < "0" or c > "9": break res = res * 10 + sign * ((int)(c) - (int)("0")) index += 1 return min(max(res, -(2 ** 31)), 2 ** 31 - 1)
|