欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode 8.字符串转换整数 (atoi)

程序员文章站 2024-03-25 08:31:04
...

8.字符串转换整数 (atoi)

LeetCode 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;
    }
}

LeetCode 8.字符串转换整数 (atoi)