LeetCode第八题:字符串转换整数 (atoi)【8 1000 python】(2)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

注意:如果无法进行有效的转换,返回 0。

示例:

给定的测试用例包括:

“42” 应该返回 42
" -42"(带有前导空格的负数)应该返回 -42
“4193 with words”(数字后跟文字)应该返回 4193
“words and 987”(文字后跟数字)应该返回 0,因为在有效数字前出现非空字符
“-91283472332”(溢出32位整数范围的负数)应该返回 −2^31

解题思路

初级尝试:直接转换

一种直观的方法是尝试直接将字符串转换为整数,忽略非数字字符。

def myAtoi_v1(s: str) -> int:
try:
return int(s)
except ValueError:
return 0

问题:这个简单的方法没有考虑到题目中的所有细节,比如字符串前的空格和字符串中间的非数字字符。

由于这个版本尝试将整个字符串直接转换为整数,所以在遇到非纯数字字符串时会抛出 ValueError 异常,然后返回 0。因此,对于带有非数字字符的字符串(例如,"4193 with words""words and 987"),这个方法将不能正确处理,直接返回 0

改进:逐字符解析

意识到直接转换的问题后,我们尝试逐字符解析字符串,按照题目的规则进行处理。

def myAtoi_v2(s: str) -> int:
s = s.strip()
if not s:
return 0

negative = 1
if s[0] in (‘+’, ‘-’):
negative = -1 if s[0] == ‘-’ else 1
s = s[1:]

res = 0
for char in s:
if char.isdigit():
res = res * 10 + int(char)
else:
break

return max(-231, min(res * negative, 231 - 1))

问题:虽然这个方法处理了前导空格和符号,但它没有完全遵循题目的描述,比如在转换过程中的溢出检查。

这个版本能够更准确地处理前导空格、正负号和数字字符的组合,但在遇到数字后跟随的非数字字符时能正确停止解析并返回已解析的数字。对于溢出的情况,它通过在返回前进行最大/最小值的检查来处理,因此能够返回正确的溢出边界值。

最终版本:完整处理所有边界条件

在改进的基础上,我们对代码进行优化,确保能正确处理所有边界条件和溢出情况。

def myAtoi(s: str) -> int:
s = s.strip()
if not s:
return 0

negative = 1
start = 1 if s[0] in (‘+’, ‘-’) else 0
if start and s[0] == ‘-’:
negative = -1

res = 0
for char in s[start:]:
if char.isdigit():
res = res * 10 + int(char)

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-wQUd5XJ8-1713701312893)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值