题目
题解
K神大佬详细题解:面试题67. 把字符串转换成整数(数字越界处理,清晰图解)
题目怎么说呢、难度在于很麻烦,要仔细。
大概步骤:
- 先去除两边空格、转化为字符数组
- 再判断字符数组是否为0、为0直接返回0
- 再设置一个变量sign表示正负
- 判断第一是否为正负字符、为﹣就将sign改为-1、且将开始遍历的索引改为1
- 然后开始遍历、先判断是否为数字、不是直接返回0
- 再判读是否超过最大值、超过根据符号±直接返回
- 都不满足5、6条件就是进行拼接了
- 最后遍历完成直接返回res*sign
class Solution {
public int strToInt(String str) {
char[] chars = str.trim().toCharArray();
if (chars.length == 0){
return 0;
}
int sign = 1, i = 0;
int res = 0,maxOrMin = Integer.MAX_VALUE / 10;
if (chars[i] == '-'){
sign = -1;
i = 1;
}else if (chars[i] == '+'){
i = 1;
}
for (int j = i; j < chars.length; j++) {
if (chars[j] < '0' || chars[j] > '9'){
break;
}
if (res > maxOrMin || (res == maxOrMin && chars[j] > '7')){
return sign == 1 ? Integer.MAX_VALUE:Integer.MIN_VALUE;
}
res = res*10 + (chars[j] - '0');
}
return res*sign;
}
}