题目
代码(7.29 首刷部分看解析)
有符号
最小值:-2147483647-1
最大值:2147483647
无符号
最大值:0xffffffff
最小值:0
class Solution {
public:
int myAtoi(string s) {
int res = 0;
bool flag = true;
int i = 0;
while(s[i] == ' ')i++; // 去空格
if(s[i] == '-') {
flag = false; // 负数
i++;
} else if(s[i] == '+')
i++;
while(i < s.size() && isdigit(s[i])) {
int c = s[i]-'0';
if(res > INT_MAX/10 || (res == INT_MAX/10 && c > 7)) {
return flag ? INT_MAX : INT_MIN;
}
res = res*10 + c;
i++;
}
return flag ? res : -res;
}
};
代码(9.1 二刷自解)
class Solution {
public:
int myAtoi(string s) {
int n = s.size();
int i = 0;
while(s[i] == ' ') i++;
int flag = true;
if(s[i] == '+' || s[i] == '-') {
flag = s[i] == '+' ? true : false;
i++;
}
int ans = 0;
while(i < n && isdigit(s[i])) {
if((ans > INT_MAX/10) || (ans == INT_MAX/10 && flag && s[i] >= '7') || (ans == INT_MAX/10 && !flag && s[i] > '7'))
return flag ? INT_MAX : INT_MIN;
ans = ans*10+(s[i++]-'0');
}
return flag ? ans : -ans;
}
};