这个题主要是要考虑清楚各种字符串组合情况,比如"+-2","+0 123"这种,需要处理好第一个非空字符,这个可以为正负号和数字,后面的就只能是数字了,还有就是各种临界情况。
class Solution {
public int myAtoi(String str) {
if (null == str || 0 == str.length()) {
return 0;
}
int res = 0;
int sign = 1;
int i = 0;
while (i < str.length() && ' ' == str.charAt(i)) {
i++;
}
if (i == str.length()) {
return 0;
}
// 处理第一个非空白字符
char firstChar = str.charAt(i);
if ('+' == firstChar || '-' == firstChar) {
sign = '+' == firstChar ? 1 : -1;
i++;
}
for (; i < str.length(); i++) {
char c = str.charAt(i);
// 后续字符不是数字直接返回
if (c < '0' || c > '9') {
return sign * res;
}
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && c > '7')) {
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
res = res * 10 + (c - '0');
}
return sign * res;
}
}
网友评论