首先变成字符数组,然后循环去掉空格(利用index++来控制),然后判断第一个字符是不是+或者是-,是负的话设置符号位为-1准备最后乘。
然后进入while循环,如果不是数字,退出。如果此时的res大于除以10的最大值或者等于但加上后大于则返回最大值,小于最小值则返回最小值。
最后一步加上res。
public class Solution {
public int myAtoi(String str) {
int len = str.length();
char[] charArray = str.toCharArray();
int index = 0;
while (index < len && charArray[index] == ' ') {
index++;
}
if (index == len) {
return 0;
}
int sign = 1;
char firstChar = charArray[index];
if (firstChar == '+') {
index++;
} else if (firstChar == '-') {
index++;
sign = -1;
}
int res = 0;
while (index < len) {
char currChar = charArray[index];
if (currChar > '9' || currChar < '0') {
break;
}
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)) {
return Integer.MAX_VALUE;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10))) {
return Integer.MIN_VALUE;
}
res = res * 10 + sign * (currChar - '0');
index++;
}
return res;
}
}