
leetcode笔记总结——(3)字符串转换整数 (atoi)(python实现)
正则匹配:提取可能的数字字符串。 溢出处理:使用
发布日期:2021-05-15 00:34:00
浏览次数:22
分类:精选文章
本文共 1140 字,大约阅读时间需要 3 分钟。
问题描述与解决方案
题目概述
我们需要将一个字符串转换为32位有符号整数。该字符串可能包含前导空格,正负号,以及零或多个数字。如果字符串为空或者无法转换成有效整数,则返回0。
输入限制
- 字符串不为空。
- 字符串只包含数字、空格和一个可选的前导符(
+
或-
)。
输出要求
将字符串转换为对应的32位有符号整数。假设输出环境只能存储32位整数,超过范围的结果需截断或调整到边界值。
技术方案
为了高效地解决这个问题,我们使用正则表达式来提取数字部分,并结合min
和max
函数来限制结果范围。
正则表达式分析
^[\+\-]?\d+
^
: asserts position at start of string.[\+\-]
:匹配一个+
或-
,但这一部分是可选的,因为它后面跟着?
(零或一次出现)。\d+
:匹配一个或多个数字。
lstrip()
- 剩余左边空格,确保处理的是有效的字符串。
findall()
- 返回所有匹配项的字符串,可用于多个提取。
max
和min
max(int(...), 2**31 -1)
:限制上界。min(int(...), -2**31)
:限制下界。
代码实现
import reclass Solution: def myAtoi(self, s: str) -> int: stripped_s = s.lstrip() # 提取数字和符号 match = re.findall(r'^[\+\-]?\d+', stripped_s) # 返回匹配结果的长度,如果是空则返回0 if not match: return 0 # 将字符串转换为整数 num = int(match[0]) # 限制在32位整数范围 return max(min(num, 2**31 - 1), -2**31)
功能解析
lstrip()
:去除前导空格。int()
转换:将提取的字符串转换为整数。max
和min
限制结果范围,确保在[-2^31, 2^31 - 1]之间。测试案例
- 输入:" 12345 "
- 结果:12345
- 输入:"-123"
- 结果:-123
- 输入:"+9876543210"
- 结果:9876543210
- 输入:"12345678901234567890"
- 结果:2147483647
- 输入: ""
- 结果:0
- 输入: "-"
- 结果:0
总结
该方法利用了正则表达式的灵活性和Python的简洁性,实现了一个高效且易读的解法。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月22日 09时32分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07
账号转账演示事务
2019-03-07
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07
简易计算器案例
2019-03-07