8. 字符串转换整数 (atoi)
题目
请你来实现一个 m y A t o i ( s t r i n g s ) myAtoi(string s) myAtoi(strings) 函数,使其能将字符串转换成一个 32 32 32 位有符号整数(类似 C / C + + C/C++ C/C++ 中的 a t o i atoi atoi 函数)。
例子
官网
- 输入:
s
=
“
42
"
s = “42"
s=“42"
输出: 42 42 42 - 输入:
s
=
"
−
42
"
s = " -42"
s="−42"
输出: − 42 -42 −42 - 输入:
s
=
"
4193
w
i
t
h
w
o
r
d
s
"
s = "4193 with words"
s="4193withwords"
输出: 4193 4193 4193
思路
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
class Solution:
def myAtoi(self, s: str) -> int:
nums = []
i = 0
sign = 1
# 去除前导空格
while i < len(s) and s[i] == ' ':
i += 1
# 判断符号位
if i < len(s) and (s[i] == '-' or s[i] == '+'):
if s[i] == '-':
sign = -1
i += 1
# 按顺序读取数字,直到非数字字符
while i < len(s) and s[i].isdigit():
nums.append(s[i])
i += 1
# 判断下一个字符是否为数字
if i < len(s) and not s[i].isdigit():
break
# 将数字字符串转换为数字,同时乘上符号位
result = sign * int(''.join(nums)) if nums else 0
# 判断是否超出整数范围
INT_MIN, INT_MAX = -2**31, 2**31-1
if result < INT_MIN:
return INT_MIN
elif result > INT_MAX:
return INT_MAX
else:
return result