LeetCode 8. 【Java】8. String to Integer (atoi)
原题链接
中等
作者:
tt2767
,
2020-03-25 16:19:17
,
所有人可见
,
阅读 685
/**
1. 字符串可能含有多种情况
1.1 合法: + , - , 0~9, space
1.2 非法: 其余字符, 判断到非法字符结束计算, 但不失败
1.3 如果超出int边界输出边界值
2. 模拟处理
2.1 确定有效段的左端点, 超出范围返回0
2.2 确定符号位是否存在且合法
2.3 确定有效端的右端点
2.4 根据有效范围和正负情况计算最后结果
*/
class Solution {
public int myAtoi(String str) {
if (str == null || str.length() == 0) return 0;
int l = 0;
while (l < str.length() && str.charAt(l) == ' ') l++;
if (l >= str.length()) return 0;
boolean neg = false;
if (str.charAt(l) == '+'){
l ++;
} else if (str.charAt(l) == '-'){
l ++;
neg = true;
} else if ('0' <= str.charAt(l) && str.charAt(l) <= '9'){
;
} else {
return 0;
}
int r = getRight(str, l);
int res = getResult(str, l, r, neg);
return res;
}
public int getResult(String str, int l, int r, boolean neg){
long res = 0;
for (int i = l ; i <= r; i++){
long cur = str.charAt(i) - '0';
res = res * 10 + cur;
if (res > Integer.MAX_VALUE) return neg ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
return (int) (neg ? -1 * res : res);
}
public int getRight(String s, int start){
for (int i = start ; i < s.length() ; i++){
char c = s.charAt(i);
if (!('0' <= c && c <= '9' )) return i - 1;
}
return s.length() - 1;
}
}