Leetcode 8 String to Integer (atoi)

2018-01-12 15:09:36 浏览数 (2)

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Update (2015-02-10): The signature of the C  function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

挺简单又挺难的一道题,就是坑太多,已经不是丧心病狂能形容了,估计这也是算法竞赛和这种面试题之间的区别吧。

好吧,我承认我WA了10发,坑点请看代码注释。

代码语言:javascript复制
class Solution {
public:
    int myAtoi(string str) {
        if(str.length()==0) // 1.空串
            return 0;
        int flag=0,first=0;
        while(str[first]==' ')// 2.前置空格去除
            first  ;
        if(str[first]=='-') //3.负号
        {
            flag=1;
            first  ;
        }
        else if(str[first]==' ')//4.还尼玛能出现正号,正负号只在开头出现一次的是合法的
            first  ;
        if(str[first]<'0' || str[first]>'9') //5.除了正负号和数字还可能有其他字符,判为0
            return 0;
        long long ans=0;
        int cnt=0;
        for(int i=first;i<str.length();i  )
        {
            cnt  ;
            if(cnt>17) //6.位数过大溢出longlong,更不用说int了
            {
                if(flag)
                    return INT_MIN;
                else
                    return INT_MAX;
            }
            if(str[i]<'0' || str[i]>'9') //7.中途出现其他字符要中断,但前面的数字依旧视为合法的
                break;
            ans*=(long long)10;
            ans =(long long)(str[i]-'0');
        }
        if(flag)
            ans=-ans;
        if(ans>INT_MAX)//8.int溢出处理
            return INT_MAX;
        if(ans<INT_MIN)
            return INT_MIN;
        return (int)ans;
    }
};

0 人点赞