Leetcode 第8题 字符串转换整数(atoi)
今天写道力扣第八题 看到有评论说java的判断溢出不容易, 便自己实现了这个代码, 用力扣上的判断方式
java的Integer类有Integer.Max和Integer.Min属性, 我用的当前数乘以十加上个位判断是否溢出
1.判断上溢出:(sum > Integer.Max / 10 || (sum == Integer.Max/10 && pop > 7))这里pop是要加上的个位的数。
2.判断下溢出:(sum < Integer.Max / 10 || (sum == Integer.Max/10 && pop < -8))
// An highlighted block
public static int myAtoi(String str) {
if (str == null || str.length() == 0) {
return 0;
}
char[] arr = str.toCharArray();
int flag = 1;
int i = 0;
while (i < arr.length && arr[i] == ' ') {
i++;
}
if (i == arr.length) {
return 0;
}
if (arr[i] == '-' || arr[i] == '+') {
if (arr[i] == '-') {
flag = -1;
}
i++;
}
int sum = 0;
for (; i < arr.length && arr[i] >= '0' && arr[i] <= '9'; i++) {
if (flag < 0) {
if (sum < Integer.MIN_VALUE / 10 || (sum == Integer.MIN_VALUE / 10 && arr[i] - '0' > 8)) {
return Integer.MIN_VALUE;
}
int tem = arr[i] - '0';
sum = (sum * 10 - tem);
if (sum > 0) {
sum = 0 - sum;
}
} else {
if (sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && arr[i] - '0' > 7)) {
return Integer.MAX_VALUE;
}
int tem = arr[i] - '0';
sum = (sum * 10 + tem);
}
}
return sum;
}