字符串转换整数 (atoi)
# 📃 题目描述
题目链接:https://leetcode.cn/problems/string-to-integer-atoi/
# 🔔 解题思路
需要考虑以下几种情况:
1)去掉前导 0
2)去掉前导 0 后的第一个字符,判断是否是符号位(题目要求:如果不存在符号位,则假定结果为正)
3)处理数字字符
如果读取到非数字字符,直接返回(题目要求:读入下一个字符,直到到达下一个非数字字符或到达输入的结尾)
数字需要保持在 int 范围内
// 执行 sum = sum * 10 + sign * num if (sign == -1) { // 负数 if (sum < Integer.MIN_VALUE / 10 || (sum == Integer.MIN_VALUE / 10 && -num < Integer.MIN_VALUE % 10)) { return Integer.MIN_VALUE; } } else { // 正数 if (sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && num > Integer.MAX_VALUE % 10)) { return Integer.MAX_VALUE; } }
合法的情况下,才考虑转换
class Solution {
public int myAtoi(String s) {
int i = 0;
// 1. 去掉前导 0
for (; i < s.length(); i ++) {
if (s.charAt(i) != ' ') {
break;
}
}
// 极端情况
if (i == s.length()) {
return 0;
}
int sign = 1;
char firstChar = s.charAt(i);
// 2. 处理符号位(题目要求:如果不存在符号位,则假定结果为正)
if (firstChar == '-') {
sign = -1;
i ++;
}
else if (firstChar == '+') {
i ++;
}
// 3. 处理数字字符
int sum = 0;
for(; i < s.length(); i ++) {
char cur = s.charAt(i);
// 3.1 读取到非数字字符,直接返回(题目要求:读入下一个字符,直到到达下一个非数字字符或到达输入的结尾)
if (!Character.isDigit(cur)) {
return sum;
}
int num = cur - '0';
// 3.2 数字需要保持在 int 范围内
if (sign == -1) {
// 负数
if (sum < Integer.MIN_VALUE / 10 ||
(sum == Integer.MIN_VALUE / 10 && num > -(Integer.MIN_VALUE % 10))) {
return Integer.MIN_VALUE;
}
}
else {
// 正数
if (sum > Integer.MAX_VALUE / 10 ||
(sum == Integer.MAX_VALUE / 10 && num > Integer.MAX_VALUE % 10)) {
return Integer.MAX_VALUE;
}
}
// 3.3 合法的情况下,才考虑转换,记得把符号位乘进去
sum = sum * 10 + sign * num;
}
return sum;
}
}
# 💥 复杂度分析
- 空间复杂度:
- 时间复杂度:
🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~
帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10