LeetCode 8 字符串转换整数,就是实现 atoi,没有算法技巧,纯模拟+防溢出。
🟡 字符串转换整数 (atoi)
实现 atoi:跳过前导空格、处理正负号、读数字、溢出截断。" -42" → -42,"4193 with words" → 4193
没什么巧妙思路,就是按规则一步步处理,但每个边界都不能漏。四件事按顺序做:去空格→看正负号→拼数字(碰到非数字就停)→防溢出。
public int myAtoi(String s) {
int i = 0, n = s.length();
while (i < n && s.charAt(i) == ' ') i++; // 1. 去空格
int sign = 1;
if (i < n && (s.charAt(i) == '+' || s.charAt(i) == '-')) {
sign = s.charAt(i) == '-' ? –1 : 1; // 2. 看符号
i++;
}
int res = 0;
while (i < n && Character.isDigit(s.charAt(i))) { // 3. 拼数字
int digit = s.charAt(i) – '0';
if (res > Integer.MAX_VALUE / 10 ||
(res == Integer.MAX_VALUE / 10 && digit > 7))
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res * 10 + digit;
i++;
}
return res * sign; // 4. 返回
}
为什么只有 MAX_VALUE/10 判断没有 MIN 判断?因为溢出判断是统一针对正数的,res 永远是正数累加,最后才乘 sign。溢出时根据符号分别返回 MAX_VALUE 或 MIN_VALUE。
网硕互联帮助中心




评论前必须登录!
注册