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) 用来防止结果越界
posted @   布羽  阅读(176)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示