LeetCode 8.字符串转换整数 (atoi)
程序员文章站
2024-03-25 08:31:04
...
8.字符串转换整数 (atoi)
思路:
本地需要注意的是识别正负号和数字,以及越界的问题,因为int型只有31位的长度。
开始考虑使用正则将数字部分提取出来,再使用Integer.parseInt()对数字字符串部分进行转换,若报异常,则返回int型的最大或者最小值,但是此方法还是不好判断越界的临界值的正负号情况。
则思考怎么判断越界的问题?
常用的处理字符串转数字是否越界的方式就是遍历数字字符串,依次乘以10加下一位判断是否小于int型的最大值。
因为乘以10加下一位也可能出现越界的情况,则反向使用,最大值减去下一位再除以10,结果是否小于当前已经组合前面字符串的值,大于等于的情况就会越界。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
考虑到在leetCode中使用Pattern、Matcher需要增加代码导入Matcher、Pattern,并且使用正则提取出后还是得遍历字符串,最终采用的方式是直接遍历整个字符串,来转换为整数。
class Solution {
public int myAtoi(String str) {
int len = str.length();
// 去除空格
int index = 0;
while (index < len && str.charAt(index) == ' ') {
index++;
}
if (index == len) {
return 0;
}
//正负
boolean negative = false;
char firstChar = str.charAt(index);
if (firstChar == '+') {
index++;
} else if (firstChar == '-') {
index++;
negative = true;
} else if (!Character.isDigit(firstChar)) {
return 0;
}
int res = 0;
while (index < len && Character.isDigit(str.charAt(index))) {
int digit = str.charAt(index) - '0';
if (res > (Integer.MAX_VALUE - digit) / 10) {
// 是否越界
return negative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
res = res * 10 + digit;
index++;
}
return negative ? -res : res;
}
}
上一篇: SLAM精度评测工具EVO使用
下一篇: bmp图片内部任意区域像素提取算法