原题:点击此处
考点:如何用Int来判断数字越界
方法:
int boundary = Integer.MAX_VALUE / 10;
如果 res > boundry 或 res == boundary && chs[i] > ‘7’ (这个是因为边界的最后一个数字为8)
时间复杂度:O(n)
空间复杂度:O(n)(使用trim,新创建一个String)
自己写的较为复杂的代码:
class Solution {
public int strToInt(String str) {
//符号位
int sign = 1;
int boundry = Integer.MAX_VALUE/10;
char[] chs = str.trim().toCharArray();
int res = 0;
for(int i = 0;i<chs.length;i++){
if(i == 0){
//首位判断
if(chs[i] == '-'){
sign = -1;
continue;
}else if(chs[i] == '+'){
sign = 1;
continue;
}else if(chs[i] < '0' || chs[i] > '9'){
break;
}else{
res = (int)(chs[i]-'0');
continue;
}
}
//不满足条件的直接踢走
if(chs[i] < '0' || chs[i] > '9'){
break;
}
//判断是否越位
if(res > boundry || (res == boundry && chs[i] > '7')){
return sign == -1?Integer.MIN_VALUE:Integer.MAX_VALUE;
}
res = res*10 + (int)(chs[i]-'0');
}
return res*sign;
}
}
简化版:
注意 i == 0的判断是如果跳过的
class Solution {
public int strToInt(String str) {
char[] chs = str.trim().toCharArray();
if(chs.length == 0){
return 0;
}
//符号位
int sign = 1;
int boundry = Integer.MAX_VALUE/10;
int res = 0;
int i = 1;
if(chs[0] == '-'){
sign = -1;
}else if(chs[0] != '+'){
i = 0;
}
for(int j = i;j<chs.length;j++){
//不满足条件的直接踢走
if(chs[j] < '0' || chs[j] > '9'){
break;
}
//判断是否越位
if(res > boundry || (res == boundry && chs[j] > '7')){
return sign == -1?Integer.MIN_VALUE:Integer.MAX_VALUE;
}
res = res*10 + (int)(chs[j]-'0');
}
return res*sign;
}
}