leetcode-8
作者:互联网
https://leetcode-cn.com/problems/string-to-integer-atoi/
思路:先判断空格,接着判断+-号,最后对数字进行处理,同时注意边界值处理。由于值域[-2147483648,2147483647],故在边界处理上只需要处理大于2147483647即可。负数可以标记位处理
int myAtoi(string s) {
if (s == "") {
return 0;
}
long res = 0;
int i = 0;
while(s[i] == ' ') {
i += 1;
if (i >= s.length()) {
return 0;
}
}
int sign = 1;
if (s[i] == '-') {
sign = -1;
}
//+-符号只允许存在一个,两个同时出现时,返回0
if (s[i] == '+' || s[i] == '-') {
i++;
}
for (; i < s.length(); i++) {
if (s[i] >= '0' and s[i] <= '9') {
//此处不能用>=,利用尾数来判断是否大于7,大于7的(2147483647 - 9 / 10 一定小于214748364)小于7的话(2147483647 - 1 /10 一定等于214748364),例子:2147483641、2147483649
if (res > (INT_MAX - (s[i] - '0')) / 10 ) {
if (sign == 1) {
return INT_MAX;
} else {
return INT_MIN;
}
}
res = res * 10 + (s[i] - '0');
} else {
return res * sign;
}
}
return res * sign;
}
标签:10,return,int,res,sign,2147483647,leetcode 来源: https://blog.csdn.net/shushi6969/article/details/113677964