1. 题目

https://leetcode.cn/problems/string-to-integer-atoi/submissions/428764685/
LeetCode 8 是一道字符串转换整数的题目,
考查的是如何处理各种边界情况和异常输入,比如空格、正负号、非数字字符、溢出等
2. 解法
解法思路:
- 首先,使用trim()方法去除字符串s的开头和结尾的空格。
- 然后,判断字符串是否为空,如果为空,就返回0。
- 接着,判断字符串的第一个字符是否是正负号,如果是,就记录下符号,并将索引index加一,跳过这个字符。如果不是,就默认为正号。
- 然后,使用一个循环遍历字符串的剩余字符,每次取出一个字符c,并进行以下操作:
- 判断c是否是数字,如果不是,就跳出循环,结束转换。
- 判断当前的结果result是否会溢出整数范围,如果是,就根据符号返回最大值或最小值。
- 将c转换为数字,并将result乘以10再加上c,得到新的结果。
- 将索引index加一,继续下一个字符。
- 最后,将结果result乘以符号sign,并返回。
具体实现
class Solution {
public int myAtoi(String s) {
// 去除空格
s = s.trim();
// 判断是否为空
if (s.length() == 0) {
return 0;
}
// 判断正负号
int sign = 1;
int index = 0;
if (s.charAt(0) == '+') {
index++;
} else if (s.charAt(0) == '-') {
sign = -1;
index++;
}
// 转换数字
int result = 0;
while (index < s.length()) {
char c = s.charAt(index);
// 判断是否为数字
if (c < '0' || c > '9') {
break;
}
// 判断是否溢出
if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && c - '0' > Integer.MAX_VALUE % 10)) {
return sign > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
// 累加数字
result = result * 10 + (c - '0');
index++;
}
// 返回结果
return sign * result;
}
}
3. 总结
浙公网安备 33010602011771号