leetcode 8.字符串转换整数
这题目,两种典型的思路,第一种,直接按照题目要求来做就好了。把前面的空格符跳过,处理±符号,然后将数字字符不断累加转换即可。
关键的一个点是如何判断溢出问题,用来记录答案的中间变量可以定义为long long变量(注意long和int都是四字节,usigned int也是不可取的,范围仍旧不满足要求。直接用longlong省时省力)
自己的实现代码如下
class Solution { public: int myAtoi(string str) { if(str.length()==0) return 0; int begin=0; while(str[begin]==' '&&begin<str.length()) begin++; if(begin==str.length())return 0; bool flag= false; if(str[begin]=='-'){ begin++; flag=true; } else if (str[begin]=='+'){ begin++; } else if (str[begin]>'9'||str[begin]<'0'){ return 0; } long long ans=0; while (str[begin]<='9'&&str[begin]>='0'&&begin<str.length()){ ans=ans*10+(str[begin]-'0'); if(!flag&&ans>=INT_MAX)return INT_MAX; else if(flag&&ans-1>=INT_MAX)return INT_MIN; begin++; } if (flag) return 0-ans; else return ans; } };
当然啦,如果学过正则表达式的人,应该都能想到用正则表达式直接把有效字符串提取出来,,,
但是我比较久没有用正则表达式(只在编译原理里面认真学过哈哈),确实一下想要上手有难度。
反正平常工作直接用轮子了,谁还去造。
正则表达式实现代码如下(python代码)。
1 2 3 | class Solution: def myAtoi( self , s: str ) - > int : return max ( min ( int ( * re.findall( '^[\+\-]?\d+' , s.lstrip())), 2 * * 31 - 1 ), - 2 * * 31 ) |
- 使用正则表达式
^:匹配字符串开头,[\+\-]:代表一个+字符或-字符,?:前面一个字符可有可无,\d:一个数字,+:前面一个字符的一个或多个,\D:一个非数字字符
max(min(数字, 2**31 - 1), -2**31)
用来防止结果越界
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南