![8abc2ee84d6d5fdf93e451af863cbccf.png](https://i-blog.csdnimg.cn/blog_migrate/d68bf93419359c9d7d2de3ac14f39ed3.jpeg)
![01243fb4b650774cf6a24bfe79cfde54.png](https://i-blog.csdnimg.cn/blog_migrate/bc572376c0fd529255dcc12b5cbddff5.jpeg)
思路:借助正则表达式。
class Solution:
def myAtoi(self, s: str) -> int:
import re
pattern = re.compile(r'^[-+]?d+') # 生成pattern
s = s.lstrip() #去除左侧空格
num_str = pattern.findall(s) #找到pattern,返回一个list
num = int(*num_str) #用*将list解包
return max(min(num, 2**31-1), -2**31) #界限处理:小于最大的有符号正整数,然后大于最小的有符号负整数
正则表达式:
^用法:限定开头,如 ^A会匹配"An e"中的A,但是不会匹配"ab A"中的A,此处用以限定只匹配从左侧字符串开头的数字字符串,因此findall()返回的列表最多一个元素。
[]用法:是定义匹配的字符范围。
?用法:匹配零次或一次。
d+用法:匹配多个数字。
compile() 函数用于编译正则表达式,生成一个正则表^达式( Pattern )对象。
findall()在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
lstrip()去除字符串左侧空格。
function(*list)*表示对list进行解包。
python的解包可以这样来理解:把元素给拆分并把其赋值给自己所需要的变量,因此元素应该是一个可迭代对象。
max(min(num, 2**31-1), -2**31) #界限处理:num应该小于最大的有符号正整数,然后大于最小的有符号负整数。