67.把字符串转换成整数
大约 1 分钟
67.把字符串转换成整数
参考链接
LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode)
个人尝试❌
这道题写得有点稀巴烂,代码质量很差,并且还没通过😂
class Solution {
public int myAtoi(String str) {
if (str == null || str.length() == 0) return 0;
char[] strArr = str.toCharArray();
char[] res = new char[strArr.length];
// 去除前导空格
int i = 0;
int j = 0;
while (i < strArr.length && strArr[i] == ' ') {
i++;
}
// + - 号
if (i < strArr.length && (strArr[i] == '+' || strArr[i] == '-')) {
res[j++] = strArr[i++];
}
// 数字
while (i < strArr.length && strArr[i] >= '0' && strArr[i] <= '9') {
res[j++] = strArr[i++];
}
// char[] 转 long?
int k = res.length - 1;
long resLong = 0;
while (k >= 0 && res[k] == '\0') k--;
long tmp = 1;
boolean negative = (res[0] == '-');
for (; k >= 0; k--) {
if (res[k] == '+') continue;
else if (res[k] == '-'){
resLong *= -1;
negative = true;
continue;
}
resLong += (res[k] - '0') * tmp;
tmp *= 10;
if (!negative && resLong > Integer.MAX_VALUE) return Integer.MAX_VALUE;
else if (negative && (resLong < Integer.MIN_VALUE || resLong > Integer.MAX_VALUE))
return Integer.MIN_VALUE;
}
return (int) resLong;
}
}
遇到
str="10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000522545459"
本该输出 「2147483647」,而实际输出了「522545459」
优秀题解
class Solution {
public int myAtoi(String str) {
char[] c = str.trim().toCharArray();
if(c.length == 0) return 0;
int res = 0, bndry = Integer.MAX_VALUE / 10;
int i = 1, sign = 1;
if(c[0] == '-') sign = -1;
else if(c[0] != '+') i = 0;
for(int j = i; j < c.length; j++) {
if(c[j] < '0' || c[j] > '9') break;
if(res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res * 10 + (c[j] - '0');
}
return sign * res;
}
}
作者:Krahets
链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/solutions/201301/mian-shi-ti-67-ba-zi-fu-chuan-zhuan-huan-cheng-z-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
从前往后开始遍历,以 「Integer.MAX_VALUE / 10」为边界判断是否越界。