字符串转换函数(atoi)(Leetcode)

Problem: 8. 字符串转换整数 (atoi)

思路

先处理掉字符串前部分的空格,然后遍历并且处理字符串,使用布尔类型变量记录字符串的正负号,在处理过程中,将字符串的字符进行叠加,最后得出结果。

解题方法

预处理->记录正负号->处理字符串->叠加数字->得出结论

复杂度

  • 时间复杂度:

本题中,我只是遍历了一遍字符串,因此时间复杂度为 O(n)O(n)

  • 空间复杂度:

本题中,我没有申请其他空间,只是在字符串本身上进行处理 ,因此空间复杂度为 O(1)O(1)

Code


class Solution {
public:
    int myAtoi(string s) {
        if(s.size()==0) return 0;
        long long ans=0;
        bool flag=false;
        int index=0;
        while(s[index]==' ')//处理掉字符串前部的空格
        {
            ++index;
        }
        for(int i=index;i<s.size();++i)//遍历
        {
            if(!flag&&isdigit(s[i])!=0&&ans>(INT_MAX-(s[i]-'0'))/10)//判断是否大于最大值
            {
                return INT_MAX;
            }
            if(flag&&isdigit(s[i])!=0&&ans>(INT_MAX-(s[i]-'0'))/10)//反着用最大值判断判断是否小于最小值
            {
                return INT_MIN;
            }
            if(isdigit(s[i])!=0)//判断是否是数字
            {
                int digit=s[i]-'0';
                ans=ans*10+digit;//叠加
            }
            else if(s[i]=='-'&&i==index)//记录负号
            {
                flag=true;
                continue;
            }
            else if(s[i]=='+'&&i==index)
            {
                continue;
            }
            else
            {
                break;
            }
            
        }
        return flag?-ans:ans;
    }
};
Leetcode刷题整合 文章被收录于专栏

都是作者刷到的一些感觉是好题整理到一起的,辛苦整理不易,麻烦给个赞,有疑问请留言

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:11
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务