云计算百科
云计算领域专业知识百科平台

LeetCode 8 字符串转换整数 - atoi模拟题

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。


赞(0)
未经允许不得转载:网硕互联帮助中心 » LeetCode 8 字符串转换整数 - atoi模拟题
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!