在每轮数字拼接前,判断 resres 在此轮拼接后是否超过 2147483647,若超过则加上符号位直接返回。设数字拼接边界 bndry=2147483647 // 10=214748364,则以下两种情况越界:
res>bndry 情况一:执行拼接10×res≥2147483650越界
res=bndry,x>7 情况二:拼接后2147483648或2147483649
public int strToInt(String str){
int res=0;//结果
int bndry=Integer.MAX_VALUE/10;
int index=0;
int len=str.length();
int sign=1;//正负符号
if(len==0) return 0;
while (str.charAt(index)==' '){
if(++index==len) return 0;
}
if(str.charAt(index)=='-') sign=-1;
if(str.charAt(index)=='+'||str.charAt(index)=='-') index++;
for(int j=index;j<len;j++){
if(str.charAt(j)<'0'||str.charAt(j)>'9') break;
//判断数字越界
//这里这个条件的意思为,因为题目要求不能超过int范围,所以需要判断结果是否越界
//因为res每次都会 * 10 ,所以外面定义了一个int最大值除以10的数字
//此时只需要保证本次循环的res * 10 + chars[j] 不超过 int 即可保证不越界
//res > bndry 意思是,此时res已经大于bndry了,他 * 10 一定越界
//res == bndry && chars[j] > '7' 的意思是,当res == bndry时,即:214748364
//此时res * 10 变成 2147483640 此时没越界,但是还需要 + chars[j],
//而int最大值为 2147483647,最小值-2147483648,所以当chars[j] > 7 时会越界
if(res>bndry||res==bndry&&str.charAt(j)>'7')
return sign==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
res=res*10+(str.charAt(j)-'0');
}
return sign*res;
}