题目链接
字符串转换整数
解法
很简单的一道题,对int溢出的处理总体同第七题,值得注意的一点是int范围的最大正数比int范围的最大负数绝对值少1,所以需要特判res = INT_MIN 的情况,参见第17行。代码如下:
class Solution {
public:
int myAtoi(string s) {
int k = 0;
while (k < s.size() && s[k] == ' ') k ++;
if (k == s.size()) return 0;
int minus = 1;
if (s[k] == '-') minus = -1, k ++;
else if (s[k] == '+') k ++;
int res = 0;
while (k < s.size() && s[k] >= '0' && s[k] <= '9') {
int x = s[k] - '0';
if (minus > 0 && res > (INT_MAX - x) / 10) return INT_MAX;
if (minus < 0 && -res < (INT_MIN + x) / 10) return INT_MIN;
if (-res * 10 - x == INT_MIN) return INT_MIN;
res = res * 10 + x;
k ++;
}
res *= minus;
return res;
}
};
|