题目描述
输入:s = " 4193 with words"
输出:4193
输入:s = " with words 4193 "
输出:4193
输入:s = " 2.33 "
输出:2
考察点
主要还是理解好题目的意思。
- 考虑整数的边界值。
// 是否为负数
boolean neg = true;
// 正数,溢出
if (!neg && ans > Integer.MAX_VALUE) {
ans = Integer.MAX_VALUE;
}
// 负数,溢出
if (neg && ans > 1L + Integer.MAX_VALUE) {
ans = 1L + Integer.MAX_VALUE;
}
// [Integer.MIN_VALUE, Integer.MAX_VALUE]
neg ? (int) -ans : (int) ans;
- 字符’1’ 如何转化为十进制的 1:
- swtich case 去判断;
- 可以借助ASCII码:
int x = '1' - '0' ;
第一次:2022年12月13日10:49:49
1. 逻辑分析
代码展示
class Solution {
public int myAtoi(String str) {
str = str.trim();
if (str.length() == 0) {
return 0;
}
if (!Character.isDigit(str.charAt(0)) && str.charAt(0) != '-' && str.charAt(0) != '+') {
return 0;
}
long ans = 0L;
boolean neg = str.charAt(0) == '-';
int i = Character.isDigit(str.charAt(0)) ? 0 : 1;
while (i < str.length() && Character.isDigit(str.charAt(i))) {
Integer num = isNum(str.charAt(i));
ans = ans * 10 + (num);
i++;
if (!neg && ans > Integer.MAX_VALUE) {
ans = Integer.MAX_VALUE;
break;
}
if (neg && ans > 1L + Integer.MAX_VALUE) {
ans = 1L + Integer.MAX_VALUE;
break;
}
}
return neg ? (int) -ans : (int) ans;
}
private Integer isNum(char c) {
switch (c) {
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case '0':
return 0;
}
return null;
}
}