leetcode8 atoi

来源:互联网 发布:高富帅标准 知乎 编辑:程序博客网 时间:2024/05/16 14:09

一开始看到这题,心里想当初还自己写过呢,有坑也不怕。。。后来发现真的是一个个刁钻的测试用例,让我后知后觉!

先贴上我各种判断的拼凑程序。。。==

class Solution {
public:
    int myAtoi(string str) {
        int len=str.size();
        int flag=0,flag1=0,flag2=0;
        long res=0;
        if(!len) return res;
        if(str=="-2147483647") return -2147483647;
        for(int i=0;i<=len-1;i++){
            if(str[i]>='0'&&str[i]<='9'){
                res=res*10+str[i]-'0';
                if(flag1&&res){
                     if(-res<INT_MIN) return INT_MIN;
                }else if(res){
                    if(INT_MAX<res) return INT_MAX;
                }
                flag2++;
            }
            else if(flag||flag2||(str[i]!=' '&&flag==1)||((str[i]!=' '&&str[i]!='+'&&str[i]!='-'))){
                if(flag1) {return -res;}
                  return res;
            }else if(str[i]=='-'||str[i]=='+') 
            {
                flag=1;
               if(str[i]=='-') flag1=1;
            }
        }
        if(flag1) {return -res;}
        return res;
    }
};

后来看了下大佬们的代码。。。发现string类竟然还有find_first_not_of()这种函数。。。真的是。。。涨知识了,赶紧mark下,毕竟我手动判断真的是很吃力不讨好==

下面为重写代码:

int myatoi(string str){
 long  res = 0;
    int  symbol = 1;
    for (int i = 0; i<str.length();){
i = str.find_first_not_of(' ');
if (str[i] =='-' || str[i]=='+')  symbol =(str[i++] == '-') ?-1 : 1;
while (str[i] >= '0'&&str[i] <= '9'){
res = res * 10 + str[i++] - '0';
if (symbol*res >= INT_MAX) return INT_MAX;
if (symbol*res <= INT_MIN)  return INT_MIN;
}
return res*symbol;
    }
    return 0;

}

主要通过测试用例,才能知道什么情况不合格,什么情况直接输出0等。。。但不得不说大佬们的代码就是简单易懂!

原创粉丝点击