本文已参与「新人创作礼」活动,一起开启掘金创作之路。
根据题目的测试来看,00001 == 1
边界处理非常巧妙,对于大于Integer.MAX_VALUE / 10肯定是越界了,对于相等的,大于7越界(这里将Integer.MIN_VALUE也判定为越界了,但是结果是一致的)
class Solution {
public int strToInt(String str) {
char[] arr = str.trim().toCharArray();
if(arr.length == 0) return 0;
int i = 0;
int flag = 1;
if(arr[0] == '-') {
flag = -1;
i++;
}else if(arr[0] == '+') i++;
int res = 0, bndry = Integer.MAX_VALUE / 10;
for(int j = i; j < arr.length; j++) {
if(arr[j] < '0' || arr[j] > '9') break;
if(res > bndry || res == bndry && arr[j] > '7') return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res * 10 + (arr[j] - '0');
}
return flag * res;
}
}