Leetcode:字符串转整数
解法
这道题的测试案例十分的多,每次总以为万无一失的情况下,突然报个bug告诉你有个地方没有考虑到。到最后发现整数溢出的情况,下面的代码不能用了,所以只好换个思路
class Solution {
public:
int myAtoi(string str) {
long long res = 0;
int flag = 1;
int j=0;
while (str[j] == ' ')
{
++j;
}
if (str[j] == '-')
{
flag = -1;
++j;
}
else
{
if (str[j] == '+')
++j;
else if (str[j]<'0' || str[j]>'9')
return 0;
}
int i = j;
while (str[i]>='0' && str[i]<='9')
{
res = res * 10 + (str[i] - '0');
++i;
}
res = flag * res;
if (res < INT_MIN)
res = INT_MIN;
if (res > INT_MAX)
res = INT_MAX;
return res;
}
};
AC代码:
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) return 0;
int sign = 1, base = 0, i = 0, n = str.size();
while (i < n && str[i] == ' ') ++i;
if(str[i]=='+' || str[i] == '-')
{
sign = (str[i++] == '+') ? 1 : -1;
}
while (i < n && str[i] >= '0' && str[i] <= '9')
{
if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7))
{
return (sign == 1) ? INT_MAX : INT_MIN;
}
base = 10 * base + (str[i++] - '0');
}
return base * sign;
}
};
作者:YunLambert
-------------------------------------------
个性签名:一名会音乐、爱健身的不合格程序员
可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾