LeetCode 8. 字符串转换整数 (atoi)
原题链接
中等
作者:
LangB
,
2020-10-27 23:22:57
,
所有人可见
,
阅读 304
class Solution {
public int myAtoi(String s) {
// 为了方便操作,就转换为字符数组
char[] arr = s.toCharArray();
// 为了编码方便,用变量记录数组长度
int n = arr.length;
// i为当前所使用到的数组下标
int i = 0;
// 去掉前导空格
while (i < n && arr[i] == ' ') {
i++;
}
// 如果去掉前导0就到了末尾,则返回0
if (i == n) {
return 0;
}
// 记录结果的正负情况,false表示为正,true表示为负
boolean negative = false;
if (arr[i] == '-') {
// 遇到负号
negative = true;
i++;
} else if (arr[i] == '+') {
// 遇到正号
i++;
} else if (!Character.isDigit(arr[i])) {
// 其他符号
return 0;
}
int res = 0;
while (i < n && Character.isDigit(arr[i])) {
// 当前下标所存储的数值
int digit = arr[i++] - '0';
// 如果res存储的值大于Integer的 1 / 10,则说明超出了有符号整数的范围
if (res > (Integer.MAX_VALUE - digit) / 10) {
return negative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
// 加上当前下标的值
res = res * 10 + digit;
}
// 根据正负情况返回
return negative ? - res : res;
}
}