🌕 8. 字符串转换整数 (atoi)
2022年6月20日
- algorithm
🌕 8. 字符串转换整数 (atoi)
难度: 🌕
问题描述
解法
class Solution {
public int myAtoi(String s) {
// 思路:
// 根据题意要求依次计算
char[] array = s.toCharArray();
int flag = 1; // 正负号
int len = array.length;
for(int i = 0; i < len; i ++) {
if(array[i] == ' ') {
continue;
} else if(array[i] == '+' || array[i] == '-') {
if(array[i] == '-') {
flag = -1;
}
return mySol(s, len, flag, i + 1);
} else if(isDigit(array[i]) != -1) {
return mySol(s, len, flag, i);
} else {
return 0;
}
}
return 0;
}
private int mySol(String s, int len, int flag, int left) {
int res = 0;
for(int i = left; i < len; i ++) {
int cur = isDigit(s.charAt(i));
if(cur != -1) {
// 超范判断
if(flag == 1) {
// 末尾 <= 7
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && cur > 7)) {
return Integer.MAX_VALUE;
}
} else {
if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && cur > 8)) {
return Integer.MIN_VALUE;
}
}
res = res * 10 + cur;
} else {
return res * flag;
}
}
return res * flag;
}
private int isDigit(char c) {
int res = -1;
if(c >= '0' && c <= '9') {
return c - '0';
}
return res;
}
}