相比与官方答案可能自己的答案非常繁琐,我的方案是先找到+/-符号,并记录kflag,然后重新读取数据,符号如果同时出现两次则返回0,如果数字后出现其他符号则break;输出终止。
class Solution {
public:
int myAtoi(string str)
{
long long ans = 0;
int flag = 1;
bool kflag = true;
for(char c : str)
{
if(c == ' ')
{
continue;
}
else if (c >= '0' && c <= '9')
{
break;
}
else if(c == '+' || c == '-')
{
flag = (c == '+') ? 1 : -1;
break;
}
else
{
return 0;
}
//cout<<ans<<endl;
}
for (char c : str)
{
if(c <= '9' && c >= '0')
{
kflag = false;
ans = 10 * ans + c - '0';
if (flag == 1 && ans >= INT_MAX)
return INT_MAX;
if (flag == -1 && ans * -1 <= INT_MIN)
return INT_MIN;
}
else if(c == '+' || c == '-')
{
if(kflag == true)
{
kflag = false;
continue;
}
else
break;
}
else if(c == ' ' && kflag == true)
{
continue;
}
else
break;
}
return ans*flag;
}
};