题目描述
题目要求结果要在 int型的数值范围内,注意数字越界处理。
class Solution {
public int strToInt(String str) {
if(str.length() == 0) return 0;
int sign = 1;
int res = 0;
int boundary = Integer.MAX_VALUE / 10; // res不能超过 int32的数值范围
int num_start = 0;
while(str.charAt(num_start) == ' ') { // 删除首部的空格
num_start++;
if(num_start == str.length()) return 0;
}
// 判断符号位
if(str.charAt(num_start) == '+') { // 符号位为‘+’
sign = 1;
num_start++;
}
else if(str.charAt(num_start) == '-') { // 符号位为‘-’
sign = -1;
num_start++;
}
// 遍历剩余字符
for(int i=num_start; i<str.length(); i++) {
if(str.charAt(i) - '0' >= 0 && str.charAt(i) - '0' <= 9) { // 若为数字字符,判断当前拼接结果是否越界
if(res > boundary || res == boundary && str.charAt(i) - '0' > 7)
return sign==1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; // 如果已越界,则根据符号位直接返回 INT_MAX (231 − 1) 或 INT_MIN (−231)。
res = res*10 + (str.charAt(i) - '0'); // 不越界则继续拼接数字
}
else break; // 一旦遇到有效的整数字符之外的其它字符,不需要继续转换了,直接返回
}
return sign*res; // 返回结果:符号位*拼接整数
}
}