字符串转换函数(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刷题整合 文章被收录于专栏

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

全部评论

相关推荐

团子 行业运营 n*15.5
点赞 评论 收藏
转发
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务