2022/2/27leetCode刷题
第八题,字符串转换整数
题目描述:
1、读入字符串并丢弃无用的前导空格
2、检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
3、读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。/
4、将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
5、如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
6、返回整数作为最终结果。
注意:涉及到整数的运算,需要注意溢出,通过昨天的整数反转可以知道:判断某数乘以 10 是否会溢出,那么就把该数和 INT_MAX 除以 10 进行比较。
str = str.trim(); //trim()方法的作用是去掉字符串两端的多余的空格。
Character.isDigit(char a) // 用于判断该字符是否为数字,是则返回true,不是则返回false。
s.charAt(i)-‘0’:两个字符相减实际上是ASCII码对应的数相减;
得到是一个int类型的整数。
此外,常用的ASCII码如下:
空格:32;
0~9: 48-57
a: 65
A:97
class Solution {
public int myAtoi(String s) {
boolean flag = true;
int res = 0;
String str = s.trim();
if (str.charAt(0) == '-')
flag = false;
for (int i = 0; i < str.length(); i++){
if (Character.isDigit(str.charAt(i))) {
int digit = str.charAt(i) - '0';
if (res > Integer.MAX_VALUE/10 ||(res == Integer.MAX_VALUE / 10 && digit > 7) )
return flag? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res*10 + digit;
}
}
return flag? res:(-res);
}
}