思路:依次遍历,注意前导的空格符,注意正负号以及边界条件。
class Solution {
public int myAtoi(String s) {
int i = 0, n = s.length();
// 结果
int res = 0;
// 正负数的标志位
int flag = 1;
// 去除前面的空字符
while(i < n && s.charAt(i) ==' ') i++;
// 起点
int start = i;
for(int index = i; index < n; index++){
// 遍历字符串
int ch = s.charAt(index);
// 起始位置字符为+
if(index == start && ch == '+'){
flag = 1;
// 起始位置字符为-
}else if(index == start && ch == '-'){
flag = -1;
// 该位置字符为数字
}else if(Character.isDigit(ch)){
// 取出数字
int num = ch - '0';
// 边界条件 最大值
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && num > Integer.MAX_VALUE % 10)){
return Integer.MAX_VALUE;
}
// 最小值
if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && -num < Integer.MIN_VALUE % 10)){
return Integer.MIN_VALUE;
}
// 结果累加
res = res * 10 + flag * num;
}else{
break;
}
}
return res;
}
}